Javascript 页面重定向后JQuery POST中止

Javascript 页面重定向后JQuery POST中止,javascript,ajax,post,asynchronous,Javascript,Ajax,Post,Asynchronous,我有jQueryAjax POST操作,它将一些数据保存到数据库中。该操作大约需要不到20毫秒的时间。这段javascript嵌入在.NETWebForms应用程序中(我无法控制)。这个.NET应用程序在提交按钮内触发我的帖子,并重定向到另一个页面。现在,对于以下浏览器,POST永远不会执行: 窗户上的家具 MAC上的狩猎 MAC上的Chrome IE工作良好,甚至可以在Windows上使用Chrome 因此,我做了一些测试,并试图模仿.NET Web表单网站,幸运的是,我可以通过在保存操作

我有jQueryAjax POST操作,它将一些数据保存到数据库中。该操作大约需要不到20毫秒的时间。这段javascript嵌入在.NETWebForms应用程序中(我无法控制)。这个.NET应用程序在提交按钮内触发我的帖子,并重定向到另一个页面。现在,对于以下浏览器,POST永远不会执行:

  • 窗户上的家具
  • MAC上的狩猎
  • MAC上的Chrome
IE工作良好,甚至可以在Windows上使用Chrome

因此,我做了一些测试,并试图模仿.NET Web表单网站,幸运的是,我可以通过在保存操作后直接添加“window.location=”go to Other site”来复制该网站。这是我的代码:

上述情况再现了相同的流产后行为。注意:浏览器调试器到达$.ajax语句,但从不返回“success”或“error”

我终于发现: 我在ajax调用中添加了'async:false',一切看起来都很好

现在我想确定这是否是一个正确的解决方案,因为当我在JQuery网站上阅读时:

从jQuery1.8开始,不推荐在jqXHR($.Deferred)中使用async:false;您必须使用success/error/complete回调选项,而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success()


我感觉“async:false”可能不是一个好的解决方案。我的Javascript构造可以吗?我的背景是C#,我仍在学习如何在javascript类定义中正确嵌入/使用函数。因此,我的错误可能与我的函数的错误构造有关(javascript垃圾收集器正在清理东西或其他东西)。

或者,您可以执行重定向(
window.location.href=”,而不是将设置
async
设置为false。“http://www.google.com“;
success
回调
$.ajax
调用中(并离开
async:true
):


希望对您有所帮助。

或者,您可以执行重定向(
window.location.href=”,而不是将
async设置为falsehttp://www.google.com“;
$的
成功
回调中。ajax
调用(并离开
async:true
):


希望对您有所帮助。

或者,您可以执行重定向(
window.location.href=”,而不是将
async设置为falsehttp://www.google.com“;
$的
成功
回调中。ajax
调用(并离开
async:true
):


希望对您有所帮助。

或者,您可以执行重定向(
window.location.href=”,而不是将
async设置为falsehttp://www.google.com“;
$的
成功
回调中。ajax
调用(并离开
async:true
):


希望这能有所帮助。

在本例中,您使用async:false是正确的

弃用说明是指在jqXHR对象上设置回调处理程序,但您已经通过options对象提供了回调处理程序

在这种情况下使用async:false是正确的,因为页面无论如何都会关闭,用户也不希望它有响应,所以执行阻塞大部分不会被注意到(除了20毫秒几乎是不可想象的事实)


从提供的信息来看,我看不到比这更干净的解决方案。

在这种情况下,使用async:false是合理和正确的

弃用说明是指在jqXHR对象上设置回调处理程序,但您已经通过options对象提供了回调处理程序

在这种情况下使用async:false是正确的,因为页面无论如何都会关闭,用户也不希望它有响应,所以执行阻塞大部分不会被注意到(除了20毫秒几乎是不可想象的事实)


从提供的信息来看,我看不到比这更干净的解决方案。

在这种情况下,使用async:false是合理和正确的

弃用说明是指在jqXHR对象上设置回调处理程序,但您已经通过options对象提供了回调处理程序

在这种情况下使用async:false是正确的,因为页面无论如何都会关闭,用户也不希望它有响应,所以执行阻塞大部分不会被注意到(除了20毫秒几乎是不可想象的事实)


从提供的信息来看,我看不到比这更干净的解决方案。

在这种情况下,使用async:false是合理和正确的

弃用说明是指在jqXHR对象上设置回调处理程序,但您已经通过options对象提供了回调处理程序

在这种情况下使用async:false是正确的,因为页面无论如何都会关闭,用户也不希望它有响应,所以执行阻塞大部分不会被注意到(除了20毫秒几乎是不可想象的事实)


从提供的信息来看,我看不到比这更干净的解决方案。

感谢您调查我的问题,但是window.location.href只是测试代码,不属于生产代码。NET代码正在执行类似Response.Redirect的操作,因此我希望它使用javascript重定向来模拟它,这会导致相同的错误。
Response.Redirect
?服务器端代码?如果是,浏览器客户端将不会被重定向(但AJAX请求上下文将被重定向)。如果您希望在ajax调用成功后重定向,请在客户端执行重定向,而不要在服务器端执行重定向。NET Web表单有一个表单提交按钮2。客户端这个提交按钮调用我的保存,3。然后它转到服务器发布自己的日志
//BUTTON
$('#someSaveButton').click(function () {          
    GlobalObject.save();
});

// GLOBAL OBJECT CONTAINING ALL MY ACTIONS (delete, check, save, get)
var GlobalObject = (function () {
    return {
        save: function () {
            ...
            someMode.save(); //NOTE: Depending on an url parameter different save methods are supported
            window.location.href = "http://www.google.com"; //MIMIC-ING REQUEST ABORTING
        }
    };
})();

//EVENTUALLY THE SAVE:
function save() {
    $.ajax({
        type: "POST",
        cache: false,
        url: ...,
        data: ...,
    contentType: "application/json",
        dataType: "json",

        success: function (response) {
            ...
        },
        error: function (msg) {
            ...
        }
    });
}
//BUTTON
$('#someSaveButton').click(function () {          
    GlobalObject.save();
});

// GLOBAL OBJECT CONTAINING ALL MY ACTIONS (delete, check, save, get)
var GlobalObject = (function () {
    return {
        save: function () {
            // ...
            someMode.save(); //NOTE: Depending on an url parameter different save methods are supported
        }
    };
})();

//EVENTUALLY THE SAVE:
function save() {
    $.ajax({
        type: "POST",
        cache: false,
        url: ...,
        data: ...,
    contentType: "application/json",
        dataType: "json",

        success: function (response) {
            // do stuff
            // more stuff
            // ... redirect when completed stuff
            window.location.href = "http://www.google.com"; //MIMIC-ING REQUEST ABORTING
        },
        error: function (msg) {
            // ...
        }
    });
}