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 页面不跳转。的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 ajax 调用的情况下在 window.location 中传递一个数组
将标题添加到 window.location.pathname
两个jsp界面之间使用window.location.href使用?传递参数以及接受参数