-1

我最初的任务如下:

  1. 执行 jQuery.ajax()
  2. 成功后,对服务器返回的数据做一些额外的检查
  3. 如果这些检查失败,则返回一个被拒绝的承诺。

在谷歌搜索和stackoverflowing之后,诞生了以下解决方案:

$.ajax({
  type: "POST",
  url: "some url",
  data: somedata,
  error: somefunction
}).then(function (data) {
  if (!ajaxSuccess(data, null, null)) {
      return new $.Deferred().reject().promise();
  }
  return data;
});

(函数 ajaxSuccess 确实执行了上面第 2 段中提到的检查。)

我不喜欢这段代码的是最后一行:

return data;

恕我直言,返回原始的 ajax jqXHR 对象会更正确,因为代码的结果将被第三方库 js-Grid.com 使用,它需要一个 jqXHR/promise。

所以问题是:

  1. 返回原始的ajax jqXHR而不是解析的JSON是否更正确?
  2. 如何返回原始的jqXHR?

首先十分感谢。

4

1 回答 1

1
  1. 意见无关紧要 - 做你需要的代码
  2. jQuery 对 Promises 的工作方式有一个非常松散的解释,特别是对于 AJAX 系列函数,传递给的回调函数.then实际上接收三个参数

所以,你可以这样做:

$.ajax({
  type: "POST",
  url: "some url",
  data: somedata,
  error: somefunction
}).then(function (data, textStatus, jqXHR) {
  if (!ajaxSuccess(data, null, null)) {
      return new $.Deferred().reject().promise();
  }
  return jqXHR;
});
于 2017-05-13T06:55:45.963 回答