我正在研究为其他jQuery回调提供数据的函数。问题是我没有工作喷气机。 当我将fetchdata()函数的内容直接放入.click回调中时,它可以工作,但我需要一个单独的泛型函数,以便将来可以将它与多个不同的回调一起使用。 谁能指出我在这里做错了什么?似乎fetchdata()函数中的循环中断,并且没有返回任何值。
function fetchdata(){
var html;
$.ajax({
url:'/test.php',
data:{ action: 'fetch-data' },
dataType:'json',
async: false,
success: function(data){
var entries = [];
$.each(data, function(id, val){
entries.push(val.sample);
});
var html = entries.join('');
}
});
return html;
}
$(document).on('click', 'a.btn.execute', function(e) {
e.preventDefault();
var html = fetchdata();
$('div#container').html(html);
});
PS:我为上面的演示稍微修改了我的代码,问题应该仍然存在。
答案 0 :(得分:2)
之所以发生这种情况,是因为您在成功回调中有var html = entries.join('');
,这与前一个html变量重叠。只需html = entries.join('');
即可。但请不要使用async: false
,因为它已经过时了
这是一个更好的解决方案:
function fetchdata(callback){
$.ajax({
url:'/test.php',
data:{ action: 'fetch-data' },
dataType:'json',
success: function(data){
var entries = [];
$.each(data, function(id, val){
entries.push(val.sample);
});
var html = entries.join('');
callback(html);
}
});
}
$(document).on('click', 'a.btn.execute', function(e) {
e.preventDefault();
fetchdata(function(html){
$('div#container').html(html);
});
});