我想知道success
和error
在Ember.js RESTAdapter的ajax函数中做了什么。
hash.success = function(json) {
Ember.run(null, resolve, json);
};
hash.error = function(jqXHR, textStatus, errorThrown) {
Ember.run(null, reject, jqXHR);
};
我知道hash
是通过AJAX发送的数据,但success
和error
扮演什么角色?我认为它们会基于成功或错误的AJAX响应运行,对吧?它们是在调用AJAX之前设置的,作为回调?它们是如何工作的?
但是成功和错误扮演着什么角色呢?我认为它们会基于成功或错误的AJAX响应运行,对吧?
没错,由于ember在后台使用jQuery,所以上面提到的函数只是普通的jQuery方法。
它们是在调用AJAX之前设置的,作为回调?它们是如何工作的?
至于函数本身,请参阅jQuery官方文档中的以下信息:
-
如果请求失败,则调用错误回调选项。它接收jqXHR,一个指示错误类型的字符串,以及一个异常对象(如果适用)。一些内置错误会提供一个字符串作为异常对象:"中止"、"超时"、"无传输"。
-
如果请求成功,则调用success回调选项。它接收返回的数据、包含成功代码的字符串和jqXHR对象。
我还应该提到,success
回调在最近的jQuery版本中被done
取代,并被标记为不推荐使用,如下所示:
弃用注意:jqXHR.success()、jqXHR.error()和jqXHR-complete()回调自jQuery 1.8起已弃用。要为最终删除代码做好准备,请改用jqXHR.done()、jqXHR.fail()和jqXHer.always()。
但不要担心,因为我想在jQuery完全删除这些方法之前,ember团队肯定已经赶上了新的回调版本。
最后,如果你想知道Ember.run
的呼叫是什么,你可以看看这里。但基本上,它确保了传递的目标和方法在RunLoop内部运行,还确保了任何延迟的操作,如绑定和视图更新,这些操作在最后都会被刷新。Runloop
上的这个SO回答也很有信息性。
希望能有所帮助。