2012-08-13 122 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

相关问题