我的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;
中定义了测试,则可以在其余代码中使用它。
答案 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
});
答案 1 :(得分:0)
您已在ajax成功函数中声明了您的test
变量,因此其范围仅限于成功函数。如果要从其他代码访问它,可以在全局范围内声明它,只需在成功函数中覆盖它。
var test; // delcared in global scope
$.post("MyPHP.php", {category: CATEGORY}, function(data){ test = data;});