我做了一个返回的登录功能:
return $.ajax({
type: 'POST',
url: CHEAPWATCHER.config.domain + 'api/Authenticate',
data: data
});
fiddler表示请求成功,我得到了我的令牌,但是Chrome会抛出这种异常:
extensions :: uncaught_exception_handler:8(未知)事件处理程序出错:TypeError:无法读取属性'错误'未定义的
我尝试调试并发现我的登录函数的return语句出错了。有人可以解释为什么会这样吗?
答案 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
});
再一次,把它锤回家:有没有办法来返回这个值,因为当你提交请求时它实际上不会发生,但是你不能“等待”为了它。