如何将Ajax错误结果与原始请求相关联?

时间:2010-12-09 18:48:42

标签: ajax jquery xmlhttprequest

我使用jQuery ajax函数以小突发发送数据到服务器。每个数据块都是一个简单的键值映射(传递给data函数的ajax属性)。

如果请求失败,我的错误事件处理程序如何识别哪些特定数据集无法上传?

jQuery错误处理程序的函数签名是:

error(XMLHttpRequest, textStatus, errorThrown)

textStatuserrorThrown似乎无法识别失败的数据集,而XHR似乎也无法提供此功能。

简单地说,如果请求失败,我希望能够获得我传递给id函数的data的{​​{1}}属性。我怎么能这样做?

2 个答案:

答案 0 :(得分:7)

检查this ...从文档中 - 请注意突出显示的部分:

  

beforeSenderrordataFiltersuccesscomplete选项都会采用在适当时间调用的回调函数。所有这些对象的this对象将是设置中传递给context的{​​{1}}属性中的对象; 如果未指定,则它将自动引用Ajax设置。

因此,在$.ajax回调(也是error()success等)中,complete将成为传递给this的对象 - 除非您是使用$.ajax()参数进行更改。

注意,传递到context的{​​{1}}参数将转换为GET或POST请求的序列化字符串

另一个选择是确保您的data回调可以访问同一范围内的变量:

$.ajax()

See this fiddle for an example - 请注意error()内的 (function() { // create a scope for us to store the data: var data = {id: 1}; $.ajax({ url: '/something-to-genereate-error', data: data, error: function() { console.log(this, data); } }); })(); // call the function immediatey data,而我们保留this的副本仍为"id=1" < / p>

另外 - 请注意,此处的闭包(data)几乎没有必要,它只是在将{id:1}变量传递给(function() { .... })()并使用它之前显示存储data变量的方法在回调中。很可能这个ajax调用已经存在于你可以执行此操作的函数中。

答案 1 :(得分:0)

好的,我想我找到了它(基于我以前的答案和gnarf中的答案,

$.ajax({
    type: "POST",
    url: "not-found",        
    context: {id: 123, name: "hello world"},        
    error: function(){  
        console.debug($(this)); //only works in chrome                    
    }
});