3

我想知道Ember.js RESTAdapter 的ajax 函数success和做什么。error

hash.success = function(json) {
  Ember.run(null, resolve, json);
};

hash.error = function(jqXHR, textStatus, errorThrown) {
  Ember.run(null, reject, jqXHR);
};

我知道hash通过 AJAX 发送的数据,但是有什么作用successerror作用呢?我假设它们会根据成功或错误的 AJAX 响应运行,对吗?它们是在调用 AJAX 之前设置的,作为回调?它们是如何工作的?

4

1 回答 1

5

但是成功和错误扮演什么角色呢?我假设它们会根据成功或错误的 AJAX 响应运行,对吗?

对,因为 ember 在后台使用 jQuery,所以提到的函数只是普通的 jQuery 方法。

它们是在调用 AJAX 之前设置的,作为回调?它们是如何工作的?

至于函数本身,请参阅从jQuery 官方文档中获取的信息:

  • 如果请求失败,则调用错误回调选项。它接收 jqXHR、一个指示错误类型的字符串和一个异常对象(如果适用)。一些内置错误会提供一个字符串作为异常对象:“abort”、“timeout”、“No Transport”。

  • 如果请求成功,则调用成功回调选项。它接收返回的数据、包含成功代码的字符串和 jqXHR 对象。

我还应该提到,success回调在最近的 jQuery 版本中被替换并被done标记为已弃用,如此处所述:

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

但不要担心,因为我猜想在 jQuery 完全删除这个方法之前,ember 团队肯定已经赶上了新的回调版本。

最后,如果您想知道调用的内容在哪里,Ember.run您可以在这里查看。但基本上它确保传递的目标和方法在 RunLoop 内运行,确保任何延迟的操作,如绑定和视图更新,最后都会刷新。这个SO答案Runloop也非常有用。

希望能帮助到你。

于 2013-07-09T23:14:25.400 回答