我正在尝试将Firefox从当前地址 url_1 重定向到ajax回调函数中的 url_2 :
window.location = url_2
执行此行代码后,地址行显示相同的 url_1 ,但浏览器窗口只显示白屏,并在此状态下挂起。
我尝试了同样的负面结果的不同方法:
window.location.assign(url_2)
window.location.replace(url_2)
window.location = url_2
return false;
window.location.href = url_2
此外,我注意到在window.location之前插入警报('某事')会导致Firefox正常工作,并且在对话窗口关闭后重定向到 url_2 。
其他浏览器可以毫无问题地进行重定向。
如何解决这个问题?
其余代码:
initializeViewModels = function (data, submitUrl) {
// Handler of "submit" button click
$(".submit").click(function () {
var json = ko.toJSON(window.viewModel);
//Submiting data to the server
$.ajax({
url: submitUrl,
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json; charset=utf-8',
success: callback
});
});
var callback = function (data) {
var url_2 = window.myViewUrl + '/' + data.Id.toString();
window.location = url_2;
}
};
答案 0 :(得分:1)
挂起是由回调函数引起的。由于AJAX调用未完全关闭,因此垃圾收集器在尝试在到达请求的url_2之前卸载页面时会产生问题。
不要直接在AJAX window.location.replace()
回调中使用onSuccess
行,而是可以使用setTimeout(window.location.replace(),5);
来修复问题,因为这将在AJAX闭包之外异步执行任务