2013-01-19 48 views
1

可能重複:
How to return the response from an AJAX call from a function?如何創建一個將從AJAX返回數據的JavaScript函數?

我試圖調試在谷歌瀏覽器的開發者控制檯,但以任何方式我不能得到我想要的結果。我想創建一個JavaScript函數,它將通過AJAX從外部文件返回一個值。我曾嘗試這個腳本:

var site = { 
    token: function(){ 
     $.get('auth.php',function(data){ 
      return data; 
     }); 
    } 
}; 

...當我打電話site.token()功能應該從auth.php返回所獲取的內容。但它沒有。它始終是undefined。我也試過這個:

var site = { 
    token: function(){ 
     var token = null; 
     $.get('auth.php',function(data){ 
      token = data; 
     }); 
     return token; 
    } 
}; 

但它仍然是一樣的。我也找到了這樣做的工作:

var token = $.get('auth.php',function(data){ 
    return data; 
}); 
token.responseText; 

有了這些代碼,我現在可以得到我的預期結果。但是當我把它已經在一個功能:

var site = { 
    token: function(){ 
     var token = $.get('auth.php',function(data){ 
      return data; 
     }); 
     return token.responseText; 
    } 
}; 

...它再次失敗。

* P.S .:我不知道也許我只是在編程方面真的很緊張,爲什麼我做不好。 -_-」

+0

阿賈克斯仍然是** **異步 – Bergi

+0

感謝您的評論@Musa我現在明白我的 –

回答

1

如果這是可能的,那麼函數想法可能被丟棄,而且語法可能只是:

var data = $.post("url"); 

這是不可能的,但因爲AJAX是異步這在收到響應之前需要一段時間,當這種情況發生時,你的函數被調用,這就是傳遞一個函數的想法

沒有辦法讓這個同步,以便使用return你可以使用$.ajaxasync: false,但它將被棄用他最好能做的就是return $.post(...),然後在結果上使用.done(...)來使用響應。

2

$.post()$.ajax()的簡寫,並且兩者都是異步的(除非你做得很糟糕)。您不希望在向php頁面的請求期間凍結瀏覽器的GUI線程。因此site.token()無法回覆數據。

但是,$.ajax()確實返回承諾(請參閱http://www.erichynds.com/jquery/using-deferreds-in-jquery/how does jquery's promise method really work?)。實質上,它說:「我保證當我完成後我會給你回電話。「所以,你可以構建類是這樣的:

var site = { 
    token: function(){ 
     var promise = $.get('auth.php',function(data){ 
      return data; 
     }); 
     return promise; 
    } 
}; 

,並調用它是這樣的:

var promise = site.token(); 
promise.done(function (data) { 
    alert('got the data'); 
    console.dir(data); 
}); 
+0

請注意'promise.success'已被棄用 – pimvdb

+0

您是對的,http://api.jquery.com/jQuery.ajax/是參考資料,我已將示例更新爲使用'prompse.done()' – robrich

+0

感謝您回答@robrich爵士,我從您的示例中獲得了一些想法,非常感謝! –

相關問題