数据表:实时添加额外的行?

时间:2011-10-14 11:53:35

标签: jquery

我试图在加载一个表后添加一个新行(因为我需要检索一些数据),但新行只显示'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),则结果会显示在警报中,然后写入该行。我该如何解决这个问题?

2 个答案:

答案 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_");
                    }
                }); 

            }
        } );