Google Chrome扩展程序$ .ajax发布事件处理程序错误

时间:2016-03-16 11:13:26

标签: 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_handler:8(未知)事件处理程序出错:TypeError:无法读取属性'错误'未定义的

我尝试调试并发现我的登录函数的return语句出错了。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我们来看看documentation for $.ajax()

  

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

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

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

或者,您可以以Promise方式执行此操作。返回的对象有一个函数.done(callback),它将调用此回调 - 稍后,当请求成功时 - 使用数据。

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

再一次,把它锤回家:有没有办法来返回这个值,因为当你提交请求时它实际上不会发生,但是你不能“等待”为了它。