2017-04-26 19 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(データ)。それは情報を表示します。

しかし変数に入れようとすると、何もしません。

これはなぜ起こっているのですか?あなたは、AJAXリクエストがデータを取得した後、出力が生成されていることを確認する必要があり

おかげ

+0

'done'ハンドラの' data'の値は何ですか? –

+0

あなたのコードは、ajaxリクエストが行われる前にレンダリングされます。ですから、基本的には、Ajaxリクエストがデータを取得する前にスクリプトの終わりに達しています(おそらく)。同期の回避策が必要です。 – antesoles

+0

@RoryMcCrossanは通常のテーブル情報です。何も特別なものではなく、その中にデータを持つtr要素とtd要素のセットです。私が知っているように私は言及されたように体のレンダリングのためにエラーがないことを知っているありがとう:) – Robert

答えて

1

。そうでなければ、最後のコード行は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); 
} 
関連する問題