2017-04-26 58 views
0

对于我的生活,我不明白为什么会发生这种情况。数据回来,但无法发布在jquery ajax

基本上我使用下面的代码从数据库中恢复表行。

var getCposInputs = { 
      'type': 'viewcpos', 
      'quoteid': '<?php echo $_GET['id']; ?>' 
     }; 

     $.ajax({ 
      type: 'POST', 
      url: '/Applications/Controllers/Quotes/ajax-add-sin.php', 
      data: getCposInputs, 
      dataType: 'html', 
      encode: true 
     }).done(function(data){ 

      //$('body').html(data); 
      buildcotable += data; 

     }); 

因此,大家可以看到有被注释掉行取出时给出了详细的直入体,而不是稍后送出使用JavaScript中的的.html()函数的变量。

,所以该完整的jQuery代码:

var buildcotable = ''; 
    var buildtrs = $('#formentry15').val(); 
    var coArray = ''; 
    var coArrayNumber = 1; 

    buildcotable += '<div class="table-responsive">'; 
    buildcotable += '<table class="table table-bordered">'; 

    buildcotable += '<thead>'; 
    buildcotable += '<th class="text-center">Number</th>'; 
    buildcotable += '<th class="text-center">Price</th>'; 
    buildcotable += '<th class="text-center">Installments</th>'; 
    buildcotable += '<th class="text-center">Contact Initials</th>'; 
    buildcotable += '<th class="text-center">Options</th>'; 
    buildcotable += '</thead>'; 

    buildcotable += '<tbody id="jquerypotable">'; 

    //lets do a check and see how many are listed 
    if(buildtrs != 'TBC'){ 

     var getCposInputs = { 
      'type': 'viewcpos', 
      'quoteid': '<?php echo $_GET['id']; ?>' 
     }; 

     $.ajax({ 
      type: 'POST', 
      url: '/Applications/Controllers/Quotes/ajax-add-sin.php', 
      data: getCposInputs, 
      dataType: 'html', 
      encode: true 
     }).done(function(data){ 

      $('body').html(data); 
      buildcotable += data; 

     }); 

    } else { 

     buildcotable += '<tr id="jqueryporow1">'; 
     buildcotable += '<td><input type="hidden" value="No" id="jqueryponumber1" class="form-control">No CPO\'s have been submitted</td>'; 
     buildcotable += '<td><input type="hidden" value="" id="jquerypovalue1" class="form-control"></td>'; 
     buildcotable += '<td class="text-center"><input type="hidden" value="" id="jquerypoinstallments1" class="form-control"></td>'; 
     buildcotable += '<td><input type="hidden" value="" id="jquerypocontactinitials1" class="form-control"></td>'; 
     buildcotable += '<td class="text-center">&nbsp;</td>'; 
     buildcotable += '</tr>'; 

    } 

    buildcotable += '</tbody>'; 

    buildcotable += '</table>'; 
    buildcotable += '<p><a href="#" class="btn btn-default btn-block" id="addnewpo">Add New CPO Number</a></p>'; 
    buildcotable += '<p><a href="#" class="btn btn-danger btn-block" id="ubldonepo">Done</a></p>'; 
    buildcotable += '</div>'; 

    $('.ubl-section-7').html(buildcotable); 

我知道数据是回来了罚款,因为当我删除了$(“身体”)的注释HTML(数据)。然后显示信息。

但是,如果试图把它放入一个变量,它什么也不做。

为什么会发生这种情况的任何想法?

感谢

+0

'完成'处理程序中'data'的值是什么? –

+0

那么,你的代码在ajax请求完成之前呈现。所以基本上,在ajax请求检索其数据之前,脚本的结束(很可能)已经到达。您需要一个同步解决方法。 – antesoles

+0

@RoryMcCrossan只是普通表信息。没有什么特别的,一组tr和td元素,其中包含数据。正如前面提到的,我知道由于在所提及的身体渲染中没有错误。谢谢:) – Robert

回答

1

你必须确保Ajax请求检索其数据后,输出端产生。否则,即使在执行buildcotable += data;之前,也会运行最后一行代码,因为ajax请求尚未准备好(它是异步的)。尝试这样的:

var buildcotable_beg = '<table><tr> ...'; 
var buildcotable_cnt = ''; 
var buildcotable_end = '...</table>'; 
var full_bld_tbl = ''; 

if (buildtrs != 'TBC') { 
    $.ajax(...).done(function(buildcotable_cnt) { 
     full_bld_tbl = buildcotable_beg + buildcotable_cnt + buildcotable_end; 
     $('.ubl-section-7').html(full_bld_tbl); 
    }); 
} else { 
    buildcotable_cnt = '<tr>...</tr>'; 

    full_bld_tbl = buildcotable_beg + buildcotable_cnt + buildcotable_end; 
    $('.ubl-section-7').html(full_bld_tbl); 
}