我试图在加载一个表后添加一个新行(因为我需要检索一些数据),但新行只显示'undefined'。它看起来像这样:
$('#example tr').each( function () {
id = this.id.substr(4);
var result2;
if (id.length > 0) {
$.post('get_stuff.php', {id: id}, function(result) {
result2 = result;
});
oTable.fnOpen( this, result2, "info_row_");
}
} );
以上打开新行并在其中写入“undefined”。但是,如果在fnOpen调用之前添加alert(result2)
,则结果会显示在警报中,然后写入该行。我该如何解决这个问题?
答案 0 :(得分:3)
您的$.post()
请求是异步的。
因此信息在仍被请求时被写入。
您可以添加:
在$.ajaxSetup({async:false});
来电之前 .post()
或.ajax()
使用async: false
选项。
.post()
只是.ajax()
或者您可以在.post()
函数的成功回调中编写vakue。
$.post('get_stuff.php', {id: id}, function(result) {
//result2 = result; // don't know if you still need the result2 var somewhere else. If that's the case you should use one of the other approaches (as stated above)
oTable.fnOpen( this, result, "info_row_");
});
答案 1 :(得分:2)
这将等到Ajax调用在执行函数之前连续完成。
$('#example tr').each( function () {
id = this.id.substr(4);
if (id.length > 0) {
$.ajax({
url:'get_stuff.php',
data: "id="+id,
success: function(result) {
oTable.fnOpen( this, result, "info_row_");
}
});
}
} );