Javascript 为什么我的deferred.done()在等待AJAX调用时没有得到解决?
我有一段代码:Javascript 为什么我的deferred.done()在等待AJAX调用时没有得到解决?,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我有一段代码: Event = new Event(); // Create a deferred object var dfd = $.Deferred(); // Add handlers to be called when dfd is resolved dfd.done( Event.getEvents( position.coords.latitude, position.coords.longitude ) ).then( function( data ){ //rest
Event = new Event();
// Create a deferred object
var dfd = $.Deferred();
// Add handlers to be called when dfd is resolved
dfd.done( Event.getEvents( position.coords.latitude, position.coords.longitude ) ).then( function( data ){
//rest of the code ..
console.log("No!");
});
那不是我想要的。不会解析“完成”,也不会触发then()
。下面是Event.getEvents
(它在另一个文件中):
我希望在AJAX调用之后触发console.log(“No!”)
(在博客的第一部分中)。但从我在控制台日志中看到的情况来看,ajax调用是在记录了“这不应该在成功之前被记录”之后执行的。完成的事情永远不会被触发。我不知道为什么
这是我的日志:
events
This shouldn't be logged before success.
success
Object
2.3322972250333
done
如果我尝试使用$.when(Event.getEvents()
..,则在“成功之前不应记录此操作”之后立即触发“完成”
在AJAX调用结束后,当我返回承诺时,如何触发延迟对象
谢谢您的代码非常奇怪:您正试图将
getEvents
函数的结果传递给$。当(它应该接受jQuery延迟对象),但是getEvents
根本没有返回语句
$。当
得到未定义的
并且实际上没有什么事可做时。我想您的getEvents
函数可能会从ajax调用返回如下结果:
this.getEvents = function( lat, lng )
{
// ... code
return $.ajax({
// ....
});
}
我认为这可能只是解决方案的一部分,但我相信这是一个良好的开端
接下来,你为什么会这样想:
console.log("This shouldn't be logged before success.");
成功之前不能执行吗?您启动了一个异步调用,下一个语句是控制台。log
。JS是单线程的,ajax调用不可能在此日志
调用之前完成工作。这没有意义
接下来,下面的代码是什么
d.resolve = ....
这不是应该的吗
d.resolve ( // ... );
?可能重复Thank but return$。AJAX是我试图避免的,因为成功方法中有一些逻辑。我只想返回过滤后的结果。执行return$.AJAX是否是使用when/deferred的唯一方法?
d.resolve ( // ... );