ajax里面使用 window.location.href 页面不跳转。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax里面使用 window.location.href 页面不跳转。相关的知识,希望对你有一定的参考价值。

$.ajax(
url: actionUrl.Update,
async: false,
data: "KeyCode": $("#KeyCode").val(), "Coupontype": $("#Coupontype").val(), "txtBeginTime": $("#txtBeginTime").val(), "txtEndTime": $("#txtEndTime").val(),"ID":$("#hfID").val() ,
dataType: 'json',
type: 'post',
success: function (result)
if (result != null && result != "")
if (result.success)
alert("更新成功");
closeWin();
window.location.href = '/Activity/KeywordActivityManage';

else
alert("更新失败");



);

ajax直接使用document.location.href='xxx.html'不能跳转存在必然问题:

首先你点击了submit,它会提交表单,但是由于你用了ajax的同步操作(也就是async:false),submit的提交被阻塞,ajax先执行,这个时候,如果你在ajax的回调函数(如:success)中写了document.location.href='xxx.html',它是执行了,的确是去执行了跳转的,于是ajax完成了,那接下来就要把刚才的submit提交的请求完成,这时候又会调回原界面,让你觉得document.location.href='xxx.html'没有跳转。

解决办法:

ajax中success添加return true

在form表单action中添加跳转地址。

希望对你有所帮助。

参考技术A 告诉你一个真正的答案:
因为你在ajax参数中有一个async:false,这个参数的意思就是说是否允许异步,而你选择false,因此不能选择异步,即使你后面跟了随机数也好,参数也好,都是只会执行不会跳转。
将这个改为true就可以了,希望对你有帮助。
参考技术B 你好,请问你解决了吗?我的也是到success 函数里,能得到后台数据,数据里有跳转地址,但使用`location.href = data.url // data是返回数据对象`没有反应,好像就只是刷新 参考技术C 在window.location.href后加一个return false;如果还是不能跳转的话在url后面随意添加一个参数。例如"/Activity/KeywordActivityManage?username=1"

IE 与 window.location.href 不兼容

【中文标题】IE 与 window.location.href 不兼容【英文标题】:IE incompatability with window.location.href 【发布时间】:2012-04-29 10:00:34 【问题描述】:

我正在使用来自 AJAX 发布请求的回调来导航到新页面,但它不适用于 Internet Explorer。我的代码如下:

$.ajax( 
    type: "POST",
    url: phpUrl,  
    data: data,  
    async: false, 
    success: function()        
         if (navigator.appName == 'Microsoft Internet Explorer')   window.location.href("/step2.php")
         else window.location.href = "/step2.php"             
    ,  
    dataType:'json'         

); 

这在 FF/Safari/Chrome 上运行良好,但是当我在 IE 上测试它时它不起作用。有没有更好的重定向到新页面的方法?我正在使用async:false,因为如果我不使用回调,我的数据不会加载到 Chrome/Safari 上,因为页面会在 POST 请求完成之前更改。

【问题讨论】:

【参考方案1】:

IE 只喜欢完整的 url。

var fullURL = 'http://www.your_site.com/step2.php';

$.ajax( 
    type: "POST",
    url: phpUrl,  
    data: data,  
    async: false, 
    success: function() 

        window.location.href(fullURL);

    ,  
    dataType:'json'         
); 

【讨论】:

【参考方案2】:

window.location.href = "/step2.php" 就好了。

【讨论】:

hmmm,除了 IE 什么都可以!你有什么想法为什么它不能在这个浏览器上运行?【参考方案3】:

是括号。 href 不是一个函数,所以尝试调用它——window.location.href("/step2.php")——是一个TypeError

像下一行一样分配给href,或者更好的是,使用location.assign()

location.assign('/step2.php');

虽然您可以直接分配给 location 的属性 (location.href='...';) 以使浏览器导航,但我建议不要这样做。

在内部,这样做只是调用location.assign(),然后分配给属性does not always behave the same in all browsers。


关于,async:false永远不要这样做。如果您发出同步 XHR 请求,you're doing it wrong。 8.4% 报告的 IE9 挂起是由于同步 XHR 阻塞了浏览器。

鉴于您在回调中有它,在 POST 完成之前不会分配给 location,所以我不确定您所说的“页面会在 POST 完成之前更改”是什么意思。 (您忘记取消表单的submit了吗?)

【讨论】:

奇怪。 location.assign("/step2.php"); 也不能在 IE 上运行,但可以在 FF/Safari/Chrome 上运行。我最初尝试将它用作函数是基于我阅读的文档(@Hexxagonal 也提到过)。 我同意你关于 async 的观点 - 我已经删除了它。感谢您的建议。 从不是一个强词。它有时对于同步 ajax 是必要且有用的。但是,你的观点很好。在需要阻塞的情况下,开发人员应注意明显地表明某些事情仍在发生,即 ajax 加载程序 gif。 @peter:这是我对never这个词感到满意的情况。关键是,如果您使用同步 XHR,您无法显示加载程序 gif,因为 XHR 请求会阻止您的页面呈现。老实说,我认为没有不能使用异步 XHR 的情况;同步 XHR 有太多缺点,无法证明在异步上使用它是合理的。 我将它与 window.location.href 混合使用...认为它是 ie 的后备方案,它使我的问题消失了。它现在正确重定向,而不是通过其他脚本摸索

以上是关于ajax里面使用 window.location.href 页面不跳转。的主要内容,如果未能解决你的问题,请参考以下文章

window.location 不使用 Ajax 重定向

如何在没有 ajax 调用的情况下在 window.location 中传递一个数组

将标题添加到 window.location.pathname

两个jsp界面之间使用window.location.href使用?传递参数以及接受参数

当 window.location=self.location 不起作用时通过 AJAX 重新加载页面

基于 AJAX 的站点中的 JS window.location