如何从jQuery.post的回调中获取变量的值?

时间:2012-07-04 02:15:59

标签: jquery

我正在尝试使用jQuery.post API之外的回调的返回值(响应)。可以这样做吗?

jQuery.post( ajaxurl, 'action', function( response ) 
{
console.log(response); // this comes back with "working"

// i tried this responseVal = response;  but didn't work            

}); 

alert(response); // this will be undefined.

所以我希望警报可以访问响应....是的我知道我可以在回调中轻松提醒它,但我的应用程序需要访问外部。

提前致谢。

2 个答案:

答案 0 :(得分:1)

当您呼叫警报时,

response超出范围。

以下代码段会执行一项功能,检查是否已设置result,如果是,则清除时间间隔并提醒result

var result, interval;

jQuery.post( ajaxurl, 'action', function( response ) 
{
    result = response;
}); 

interval = setInterval(function(){
    if(result !== undefined) {
        clearInterval(interval);
        alert(result); 
    }
}, 1000);

答案 1 :(得分:1)

该回调是异步的,因此在js中执行而不等待响应被设置。在responseVal = response触发时,alert(responseVal)很可能不会发生,因此将取消设置responseVal。

您可以通过将responseVal初始化为某些明显的“未设置”值,执行ajax调用,警报,在脚本中浪费时间(如while(responseVal == "not set") { i++; })然后再次发出警报来测试。

我知道你的问题说你无法在成功回调中使用response所需的任何内容,但我建议你更加努力地弄清楚如何这样做 else你将处理setInterval(...) shenanigans ala @ Xander的回答或在jQuery.ajax(...)中设置async=false选项(以及将该请求设为帖子并设置网址等)并阻止执行