我正在尝试从其中包含ajax调用的函数中获取json值。
这是我的功能:
function getVariables(){
$.ajax({
type: "post",
url: "db/functions.php",
data: "func=getvars,
dataType: "json",
success: function(response)
{
return {
'var1': response.var1,
'var2': response.var2
};
}
});
}
我试图在我的javascript中使用它来获取var1 var firstvar = getVariables()。var1;
当我在getVariables函数中设置警报时,它返回var1和var2,已经检查过了。所以唯一不能正常工作的部分是:var firstvar = getVariables()。var1;
答案 0 :(得分:0)
这有两个问题:
默认情况下,Ajax调用是异步的。这意味着只有在getVariables
返回后的某个时间才会调用success函数。您需要更改ajax调用的设置,以使其同步。
您的第二个问题是值是从success函数返回的,但是它不会从getVariables
函数返回它们。您需要从函数范围返回变量。
下面是相同的函数,但async
选项设置为false,并且函数范围返回值。
function getVariables(){
var rv = undefined;
$.ajax({
async : false,
type: "post",
url: "db/functions.php",
data: "func=getvars",
dataType: "json",
success: function(response)
{
rv = {
'var1': response.var1,
'var2': response.var2
};
}
});
return rv;
}
答案 1 :(得分:0)
您的匿名成功函数返回var1
和var2
(无处),但getVariables未返回它们。它实际上不能,因为它在异步JSON调用完成之前已经退出。即使它是同步的,你仍然没有返回匿名“子功能”的返回值。
function getVariables(){
var response = $.ajax({
type: "post",
url: "db/functions.php",
data: "func=getvars,
dataType: "json",
async: false
});
return {'var1': response.var1,
'var2': response.var2}
}
查看返回语句现在如何在getVariables
中,而不是在INSIDE getVariables函数中?所以现在getVariables将返回值。
虽然小心使用async:false,但它可以锁定浏览器。
答案 2 :(得分:0)
那不行。 AJAX调用是异步的,需要等待http请求完成才能使用它的返回值。
您可以使AJAX调用同步,但这可能会引入不必要的延迟。通常,更好的选择是直接在回调“成功”函数中使用变量。