【问题标题】:Google Chrome extension $.ajax post event handler errorGoogle Chrome 扩展 $.ajax 发布事件处理程序错误
【发布时间】:2016-03-16 11:13:25
【问题描述】:

我做了一个登录函数,它返回:

return $.ajax({
    type: 'POST',
    url: CHEAPWATCHER.config.domain + 'api/Authenticate',
    data: data
 });

fiddler 显示请求成功,我得到了我的令牌,但是 chrome 抛出了这种异常:

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

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

【问题讨论】:

    标签: javascript jquery ajax google-chrome google-chrome-extension


    【解决方案1】:

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

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

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

    您绝对应该查看this canonical question 关于使用ajax() 收集的数据的主题。它展示了如何使用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
    });
    

    再次强调一下:不可能返回这个值,因为它实际上不会在你提交请求时发生,而是稍后发生,你不能“等待”为它。

    【讨论】:

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