function test() {
var flag1 = false;
if ($('#field1').attr('value') || !$('#field1').attr('value')) {
$.ajaxSetup({
cache: false
});
$.getJSON("test_term.php", {
'term1': $("#cde").attr('value'),
'cd3': $("#cde3").attr('value')
}, function(data) {
if (data[0].stss == 'K') {
var status = data[0].stss;
flag1 = true;
} else if (data[0].stss == 'U' || data[0].stss == '') {
flag1 = false;
return;
}
});
}
alert("ANonymous value" + flag1);
return flag1;
}
如何从getJson()
中使用的匿名函数返回“flag1”值?
它总是返回false
,它被引用到顶部。
答案 0 :(得分:2)
这是你尝试的方式所不可能的。
Ajax调用是异步的,只要它们准备好就会返回。在外部函数getJSON()
完成运行后,您传递给test()
的内部函数 well 。
这意味着 - 无论你想在Ajax调用返回时发生什么 - 将它放入回调函数中。不使用标志和返回值。
E.g。
function do something(flag) {
// do something
}
function test() {
if ($('#field1').attr('value') || !$('#field1').attr('value')) {
$.ajaxSetup({
cache: false
});
$.getJSON("test_term.php", {
'term1': $("#cde").attr('value'),
'cd3': $("#cde3").attr('value')
}, function(data) {
if (data[0].stss == 'K') {
var status = data[0].stss;
doSomething(true);
} else if (data[0].stss == 'U' || data[0].stss == '') {
doSomething(false);
}
});
}
}
答案 1 :(得分:1)
问题不在于匿名功能,而在于其异步性。
该方法是在AJAX请求完成时执行的回调。
出于这个原因,你的
alert("ANonymous value" + flag1);
return flag1;
将在回调之前运行,因此该方法尚未更改flag1
。
在回调方法中,您需要在检索JSON数据后放置您想要发生的任何内容。
答案 2 :(得分:0)
在ajax调用返回之前,回调处理程序不会运行,因此您无法保证将更新flag1。您应该有一个单独的函数被调用以将处理带到下一步。
您可能还有变量范围的问题..您可以将flag1的声明放在函数上方,它将是全局的。