Javascript 在Ajax调用期间,停止使用按钮单击/页面更改返回错误函数

Javascript 在Ajax调用期间,停止使用按钮单击/页面更改返回错误函数,javascript,jquery,ajax,jquery-mobile,cordova,Javascript,Jquery,Ajax,Jquery Mobile,Cordova,我用的是jquery手机,cordova/phonegap。 我在页面加载中有一个jqueryajax调用,它从服务器带来一些数据。由于“超时”和“找不到页面”或“服务器关闭”的情况,它附带了一个错误函数。函数显示一些警报,如“出了问题”。到目前为止还不错 jQuery.ajax({ url: 'http://example.com/blabla.php', //load data global: false, type: "POST",

我用的是jquery手机,cordova/phonegap。 我在页面加载中有一个jqueryajax调用,它从服务器带来一些数据。由于“超时”和“找不到页面”或“服务器关闭”的情况,它附带了一个错误函数。函数显示一些警报,如“出了问题”。到目前为止还不错

jQuery.ajax({
        url: 'http://example.com/blabla.php',  //load data 
        global: false,
        type: "POST",
        dataType: "xml",
        data: data,
        async: true,
        timeout: 40000,
        success: loading_complete_list,
        error: errorfunc
    });
现在假设用户在页面中单击。突然想到“哦!不!我做了什么……让我们按下后退按钮”问题开始了。在ajax调用未完成时调用Error函数。然后显示警报消息。但我不想那样。我希望用户去他/她想去的任何地方,只要他/她想去

我想知道是否可以在不完成ajax调用的情况下转到其他页面。我不能将错误函数设为空,因为“超时”,“服务器关闭”情况需要显示一些消息。我试过了

async: false,
但这实际上是在等待ajax调用结束,然后执行按钮按下操作。“后退”按钮使用简单的

document.location="index.html;" //This style can't be changed

所以,在转到另一个页面并以其他方式调用时,如何停止要调用的error函数呢。我错过了什么?你能想出什么办法来检测这种情况吗?

嗯,在你的按钮点击功能中,你应该添加如下内容

request.abort();
其中request是ajax请求的处理程序

var request = jQuery.ajax({
        url: 'http://example.com/blabla.php',  //load data 
        global: false,
        type: "POST",
        dataType: "xml",
        data: data,
        async: true,
        timeout: 40000,
        success: loading_complete_list,
        error: errorfunc
    });
只需将处理程序放在某个地方(看在上帝的份上,不在全局范围内),就可以从ButtonOnClick函数访问它


这应该会中止请求,而不会调用错误处理程序。

因此我想没有更多的解决方案了。。。。。我现在用错误函数参数解决了这个问题

使用此选项:

function errorfunc(jqXHR, exception) {

     console.log(jqXHR.status);
     console.log(exception);
     ............................

}

通过检查此结果,我给出了自定义消息并忽略了我不想捕获的消息。

虽然我已经使用错误函数参数
errorfunc(jqXHR,exception)
解决了此问题,但您的解决方案看起来更加健壮。谢谢,我试试看。一个问题:为什么不在全球范围内?事实上,除了在全局范围内声明外,我看不到任何其他方法。我真的不喜欢在全局范围内声明变量。这不是垃圾。您可以做的是,一个类保存与页面相关的数据和函数,然后使用此->。。。访问这些数据。这个类是全局的,但只有这个类,而不是999个属性。我所知道的每种语言都是如此。污染全局范围不是一个好主意。
request.abort()这一个仍然在调用errorfuncy。嗯,我看到它只是在中止请求,使客户端停止侦听响应。因此,理论上,它应该防止调用错误回调。我的错,那是错的。