使用以下代码,它应该警告“一个”然后“两个”。按.button
时,仅提醒“一个”。 var got
未返回.button
函数。
$('.button').live('click',function() {
var got = fetchvalue('100');
if(got==1) {
alert('two');
}
});
function fetchvalue(id) {
$.getJSON('/fetchvalue.php?id='+id+'&w=1',function(data) {
alert('one');
var got=1;
});
return got;
}
答案 0 :(得分:5)
getJSON
是异步的,这意味着在此调用语句中不可能立即获取返回值,因此您的代码应为:
$('.button').live('click',function() {
fetchvalue('100', function(got) { // add a callback
if (got == 1) {
alert('two');
}
});
});
function fetchvalue(id, callback) {
$.getJSON('/fetchvalue.php?id='+id+'&w=1',function(data) {
alert('one');
var got=1;
callback(got); // invoke the callback
});
// no return is required
}
答案 1 :(得分:0)
那是因为你的变量got
的范围是你的JSON返回函数(即你不能在JSON回调函数之外访问它),加上JSON异步加载。您可以使用$ .ajax调用并将async设置为false,这具有相同的效果但没有异步加载,这意味着您在回调中设置的任何变量都不会(有效地)作用于它。
function fetchvalue(id) {
var got;
$.ajax({
url: '/fetchvalue.php?id=' + id + '&w=1',
dataType: 'json',
async: false,
data: myData,
success: function(data) {
alert('one');
got = 1;
}
});
return got;
}