我使用jQuery ajax
函数以小突发发送数据到服务器。每个数据块都是一个简单的键值映射(传递给data
函数的ajax
属性)。
如果请求失败,我的错误事件处理程序如何识别哪些特定数据集无法上传?
jQuery错误处理程序的函数签名是:
error(XMLHttpRequest, textStatus, errorThrown)
textStatus
或errorThrown
似乎无法识别失败的数据集,而XHR似乎也无法提供此功能。
简单地说,如果请求失败,我希望能够获得我传递给id
函数的data
的{{1}}属性。我怎么能这样做?
答案 0 :(得分:7)
检查this
...从文档中 - 请注意突出显示的部分:
beforeSend
,error
,dataFilter
,success
和complete
选项都会采用在适当时间调用的回调函数。所有这些对象的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
}
});