zoukankan      html  css  js  c++  java
  • ajax回调中的this.href不执行跳转的解决办法

    1. 问题背景

    如下所示代码:

            $.post("/ems/register",indata, function(data){
                if(data != null && data.result == 'error'){
                    $("#no_error").text(data.msg);
                    return false;
                }else{
                    this.href="/ems/registerSuccess";
                }
            },'json');

    即使注册成功, data.result != 'error' ,代码 : this.href="/ems/registerSuccess"; 也不会执行。测试了很久,最后才怀疑到ajax异步上来。

    原因就是这里是异步调用,this.href 是处在异步调用的回调中

    但是即使是我们使用了ajax的同步调用,那么在回调函数中的:this.href="/ems/registerSuccess"; 也不会执行:

            $.ajax({
                url:"/ems/register",
                async:false, // 注意此处需要同步,不然后面的 this.href=xxx 不执行
                type:"POST",
                dataType:"json",
                data:indata,
                success:function(data) {
                    if(data != null && data.result == 'error'){
                        alert(222);
                        $("#no_error").text(data.msg);
                        return false;
                    }else{
                        // 这里的this.href不会执行
                        this.href="/ems/registerSuccess";
                    }
                }
            });

    即使我们 async:false 采用同步调用,在firefox浏览器中的,回调函数中的 this.href="/ems/registerSuccess"; 也不会执行。

    2. 解决方法一

    只有采用同步的同时,在 ajax 代码后面的 this.href="/ems/registerSuccess"; 才会执行。

            $.ajax({
                url:"/ems/register",
                async:false, // 注意此处需要同步,不然后面的 this.href=xxx 不执行
                type:"POST",
                dataType:"json",
                data:indata,
                success:function(data) {
                    if(data != null && data.result == 'error'){
                        alert(222);
                        $("#no_error").text(data.msg);
                        return false;
                    }else{
                        // 这里的this.href不会执行
                        //this.href="/ems/registerSuccess";
                    }
                }
            });
            this.href="/ems/registerSuccess";

    最后面的 this.href="/ems/registerSuccess"; 在ajax 同步调用的后面,才会执行

    3. 解决方法二

    既然我们不能使用 this.href, 那么我们可以换一种方式,我们使用 window.open(url,'_self'),经过测试,不存在this.href的问题。代码如下:

            $.post("/ems/register",indata, function(data){
                if(data != null && data.result == 'error'){
                    $("#no_error").text(data.msg);
                    return false;
                }else{
                    //this.href="/ems/registerSuccess";
                    window.open("/ems/registerSuccess", '_self');
                }
            },'json');

    这也算是 window.href 和 window.open(url,'_self')的一个小区别吧。

    4. 解决方法三

    我们在服务端 重定向,不在浏览器端重定向。就可以绕开这个问题。(其实服务端 重定向也是不行的,因为是一个 ajax 的请求,所以服务端的重定向不起任何作用,它不会让页面重定向到新的页面。)

  • 相关阅读:
    c语言 423输出直角在右上角的等腰直角三角形
    R语言中aggregate函数进行整合数据
    c语言 425输出向下的金字塔
    C语言 423 输出直角在左上角的等腰直角三角形
    c语言 422 显示出一个横向较长的长方形
    R语言中subset函数
    R语言中for、while、if else、switch语句
    c语言 424 输出金字塔性状
    R语言中apply函数
    WinCE文件基本操作
  • 原文地址:https://www.cnblogs.com/digdeep/p/4569767.html
Copyright © 2011-2022 走看看