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

Ton*_*ony 4 ajax jquery xmlhttprequest

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

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

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

error(XMLHttpRequest, textStatus, errorThrown)
Run Code Online (Sandbox Code Playgroud)

识别失败的数据集既没有textStatuserrorThrown似乎有用,XHR似乎也没有提供这种能力.

简单地说,如果请求失败,我希望能够获得我传递给函数的id属性.我怎样才能做到这一点?dataajax

gna*_*arf 7

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

beforeSend,error,dataFilter,successcomplete选项都采取在适当的时候调用回调函数.this所有这些对象都将是设置中context传递给的属性中的对象$.ajax; 如果没有指定,那么它将是对Ajax设置本身的引用.

因此,在error()回调(也successcomplete等)中,this将是传递给的对象$.ajax()- 除非您使用context参数来更改它.

作为注释,data传入的参数$.ajax()将转换为GET或POST请求的序列化字符串

另一个选择是确保您的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
Run Code Online (Sandbox Code Playgroud)

看到这个捣鼓一个例子 -请注意,data里面this就是"id=1"wereas在data我们召开的副本仍然是{id:1}

另外 - 注意这里的闭包((function() { .... })())几乎是不必要的,它只是显示了一种data在传递变量之前存储变量的方法$.ajax()以及在回调中使用变量.很可能这个ajax调用已经存在于你可以做到这一点的函数中.