设置jQuery $ .post将数据返回到JavaScript变量

时间:2012-11-17 20:59:55

标签: php jquery ajax

我的HTML页面中有以下jQuery代码:

$.post("MyPHP.php", {category: CATEGORY}, function(data){var test = data;});

但我似乎无法在我页面的任何其他位置使用测试。我知道这是AJAX所以我必须等待$.post完成但是从未设置变量测试。如果我改为使用返回数据来更改段落的innerhtml,则段落会在一小段延迟后更新。

有什么想法吗?

编辑:破解了!您可以从$.post返回函数调用另一个函数,即:function(data){setVar(data)});并简单地定义setVar(data)函数,如下所示:

function setVar(data){test = data;}

如果已在全局范围var test;中定义了测试,则可以在其余代码中使用它。

2 个答案:

答案 0 :(得分:1)

因为var的范围有限,请尝试将测试变量移动到更全局的范围

var test;
$.post("MyPHP.php", {category: CATEGORY}, function(data){
    test = data;
 });

ajax请求是异步的,所以你永远不会知道它何时完成,除非你把你的变量放在成功回调(你)中,或者你可以使ajax请求同步(plz不要这样做)或者你可以使用{{ 3}}确保在设置所有变量时执行ajax调用相关代码。

看到这个.when即使您将测试变量移动到全局范围,它仍然会将undefined记录到控制台,所以请尝试

var test;
var x=$.post("MyPHP.php", {category: CATEGORY},, function(data){  
    test = data;   
});
console.log(test);// still undefined    
$.when( x ).then(function(args){
     console.log(test);// your var is set
});

demo

答案 1 :(得分:0)

您已在ajax成功函数中声明了您的test变量,因此其范围仅限于成功函数。如果要从其他代码访问它,可以在全局范围内声明它,只需在成功函数中覆盖它。

var test; // delcared in global scope

$.post("MyPHP.php", {category: CATEGORY}, function(data){ test = data;});