3

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

$.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;您可以在其余代码中使用它。

4

2 回答 2

1

因为你的 var 的范围是有限的尝试将你的测试变量移动到一个全局范围内

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

ajax 请求是异步的,因此您永远不会知道它何时完成,除非您将变量放入您所做的成功回调(哪个)中,或者您可以使 ajax 请求同步(请不要这样做),或者您可以.when用来确保您的设置所有变量后,将执行 ajax 调用相关代码。

即使您将测试变量移动到全局范围,它仍然会记录到控制台,因此请尝试查看此演示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
});

http://jsfiddle.net/C4JnU/1/

于 2012-11-17T21:03:52.483 回答
0

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

var test; // delcared in global scope

$.post("MyPHP.php", {category: CATEGORY}, function(data){ test = data;});
于 2012-11-17T21:04:01.127 回答