2012-08-13 120 views
0

我有一個jquery post函數從php代碼塊返回一個數據對象。

$.post("get_chat_history.php", { 
    item_id : item_id, 
    participant_1 : participant_1, 
    participant_2 : participant_2 
}, function(data) { 
    alert(data); 

    return data; 

}); 

這是從下面的函數在另一個叫JavaScript文件

var data = getChatHistory(current_member_id,item_global["user"] ["member_id"],item_global["id"]); 
alert(data); 

現在裏面的$。員額警報(數據)拋出JSON格式的正確的價值觀,但是當我測試相同的值返回給調用函數,我得到未定義的值。

有什麼我失蹤了,因爲我想保持這個函數的通用性和從其他地方調用?

問候,

Sapatos

+1

Ajax是**異步**(** A **表示異步)。你爲什麼認爲你必須提供回調?如果你可以簡單地*返回一個值,那麼'$ .post'可以直接返回這個值,你不需要回調。 – 2012-08-13 11:26:01

+1

[Javascript函數與JQuery POST總是返回undefined]的可能重複(http://stackoverflow.com/questions/1400854/javascript-function-with-jquery-post-always-returns-undefined) – Dennis 2012-08-13 11:26:07

+0

檢查出相關的問題。有幾個類似的問題應該證明是有幫助的。 – Dennis 2012-08-13 11:26:56

回答

1

這是因爲該函數運行asyncronim和數據返回到匿名函數function(data) {}。使用回調。

這裏是例子:

function getFoo(callback){ 
    $.get('somepage.html', function(data){ 
     callback(data) 
    }) 
} 
getFoo(function (data){ 
    // do something with data 
})​ 
+2

或更短:'$ .get('somepage.html',callback)'。 – 2012-08-13 11:29:27

0

你所面對的問題是,jQuery.post是異步的。當調用getChatHistory時,它尚未收到來自服務器的回覆,因此它是undefined

爲了這個工作,我將執行getChatHistory作爲一個函數,它將需要傳遞給服務器的數據和一個函數在'success'部分觸發時執行。

For more on callbacks