Javascript Google Chrome扩展$.ajax post事件处理程序错误

Javascript Google Chrome扩展$.ajax post事件处理程序错误,javascript,jquery,ajax,google-chrome,google-chrome-extension,Javascript,Jquery,Ajax,Google Chrome,Google Chrome Extension,我制作了一个登录函数,返回: return $.ajax({ type: 'POST', url: CHEAPWATCHER.config.domain + 'api/Authenticate', data: data }); fiddler显示请求成功,我得到了令牌,但chrome抛出了这种异常: extensions::uncaught_exception_处理程序:事件处理程序中的8个错误(未知):TypeError:无法读取未定义的属性“Error” 我试着调

我制作了一个登录函数,返回:

return $.ajax({
    type: 'POST',
    url: CHEAPWATCHER.config.domain + 'api/Authenticate',
    data: data
 });
fiddler显示请求成功,我得到了令牌,但chrome抛出了这种异常:

extensions::uncaught_exception_处理程序:事件处理程序中的8个错误(未知):TypeError:无法读取未定义的属性“Error”

我试着调试,发现我的登录函数的return语句出现了这个错误。有人能解释一下为什么会发生这种情况吗?

让我们看看:

返回:

从jQuery 1.5开始,$.ajax()返回的jqXHR对象实现Promise接口,为它们提供Promise的所有属性、方法和行为(有关更多信息,请参阅Deferred object)

重要的是要理解它不会返回数据。在任何情况下都不能这样做:这是一个异步请求,因此它实际上会在调用
ajax()
后发生,但必须立即提供返回值

您绝对应该看看关于使用由
ajax()收集的数据的主题。它展示了如何使用
success
参数,并解释了为什么异步请求不能以“传统的”
返回方式使用

或者,你可以用承诺的方式来做。返回的对象有一个函数
.done(callback)
,该函数将在稍后请求成功时使用数据调用此回调

$.ajax({
  type: 'POST',
  url: CHEAPWATCHER.config.domain + 'api/Authenticate',
  data: data
}).done(function(result) {
  // Do something (but not return!) with the result
});

再次强调,要把它敲到家里:没有可能的方法返回这个值,因为它不会在您提交请求时发生,而是在以后发生,而且您不能“等待”它。

谢谢,伙计!您为我节省了很多时间:))我刚才看到$http.post方法也返回jqXHR对象,当我返回它时,一切都正常。怎么样?