2010-05-11 105 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