2010-05-11 75 views
2

我有一个函数发出一个AJAX调用(通过jQuery)。在complete部分我有说,一个功能:Javascript AJAX函数返回undefined而不是true/false

complete: function(XMLHttpRequest, textStatus) 
{ 
    if(textStatus == "success") 
    { 
     return(true); 
    } 
    else 
    { 
     return(false); 
    } 
} 

但是,如果我把这个像这样:

if(callajax()) 
{ 
    // Do something 
} 
else 
{ 
    // Something else 
} 

第一个永远不会被调用。

如果我把alert(textStatus)放在complete函数中,我会变为true,但是在函数返回undefined之前不会。

是否可以将回调函数传递给我的callajax()方法?像:

callajax(function(){// success}, function(){// error}, function(){// complete});

+0

你能显示你的'callajax()'函数吗?因为你要求的应该是你已经在做的方式:) – 2010-05-11 20:08:42

+0

@Pekka:这是一个标准的'.ajax()'调用,没什么特别的。我只是想在将它部署到各种应用程序时不必修改它*。 – 2010-05-12 01:56:22

回答

7

complete回调功能。它将被Ajax对象调用 - 异步! - 操作完成时。你无法捕捉回调的结果,只有Ajax对象可以做到这一点。

您的callajax()函数 - 您没有显示该函数,但我认为它只是简单地调用Ajax调用 - 无法返回调用的结果(=响应标头和正文),因为调用还没有完成您退出callajax()功能。

更新:也很可能进行同步AJAX调用。感谢@Andris指出了这一点。在jQuery中,您需要将async选项设置为false:Docs here。但是,即使是那些使用标准回调函数,据我所知,所以你想要的方法返回falsetrue可能仍然无法正常工作。

+0

该死的......好吧,我想就是这样。如果失败/成功/完成,我能否提供额外的参数(比如说回拨)? – 2010-05-11 19:57:03

+0

你可以做的是,只要在函数内部执行“做某事”和“做其他事情”中的任何内容,并调用完整回调函数中的内容即可。 不知道这是否会有助于你的情况,只是一个猜测。 – enricog 2010-05-11 19:58:39

+0

看到我的更新,让我知道我是否在正确的轨道上。我试图使'callajax()'函数模块化,以便我可以将它用于各种站点/设置,而无需重写“成功”,“错误”和“完成”功能。 – 2010-05-11 19:59:36