星空网 > 软件开发 > 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="http://www.cnblogs.com//ems/registerSuccess";      }    },'json');

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

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

但是即使是我们使用了ajax的同步调用,那么在回调函数中的:this.href="http://www.cnblogs.com//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="http://www.cnblogs.com//ems/registerSuccess";        }      }    });

 

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

2. 解决方法一

只有采用同步的同时,在 ajax 代码后面的 this.href="http://www.cnblogs.com//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="http://www.cnblogs.com//ems/registerSuccess";        }      }    });    this.href="http://www.cnblogs.com//ems/registerSuccess";

最后面的 this.href="http://www.cnblogs.com//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="http://www.cnblogs.com//ems/registerSuccess";        window.open("/ems/registerSuccess", '_self');      }    },'json');

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

4. 解决方法三

我们在服务端 重定向,不在浏览器端重定向。就可以绕开这个问题。




原标题:ajax回调中的this.href不执行跳转的解决办法

关键词:ajax

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

江行智能:https://www.ikjzd.com/w/1573201446896918530
简赢:https://www.ikjzd.com/w/1573201447484121090
Smaker跨境电商独立站培训:https://www.ikjzd.com/w/1573201448083906562
交货期:https://www.ikjzd.com/w/1573201461186568193
嘉兴综试区:https://www.ikjzd.com/w/1573201461824102402
嘉云数据:https://www.ikjzd.com/w/1573201463040794625
价格翻了8倍,居然还有人买,秘诀在这里。:https://www.kjdsnews.com/a/1836642.html
欧洲B2B电商市场有待挖掘!销售总额将达1.7万亿欧元:https://www.kjdsnews.com/a/1836643.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流