2017-01-20 1 views
1

にAJAX呼び出しの結果を渡します。これらのajax呼び出しの1つは、外側のajax呼び出しの内側です。 '+ ='jqueryの私は2つのAJAX呼び出しに基づいて、テーブルの内容を変更するためにjqueryのを使用しようとしています内側のAJAX呼び出し

tableRowsを;:

$.ajax({ 
    type: "POST", 
    url: "../actions.php", 
    data: { username: username, catId: $('#prodCat').val(), brandId: $('#prodBrand').val(), 
      typeId: $('#prodType').val(), NameId: $('#prodName').val()}, 
    success: function(data){ 
     $('#prodList').empty(); 
     var result = JSON.parse(data); 
     var tableRows=''; 
     for(var i = 0; i < result.length; i++) { 
      var qtyArray = []; 
      $.ajax({ 
       type: "POST", 
       url: "../actions.php", 
       data: { action : 'get_product_carton_single', mainStockId: <?php echo "'".$stockId."'" ?>, productId: result[i]['id']}, 
       success: function(databack){ 
        qtyArray = databack; 
        console.log(qtyArray); 
        tableRows += '<tr>'; 
        tableRows += '<td>' + result[i]['id'] + '</td>'; 
        tableRows += '<td>' + (i+1) + '</td>'; 
        tableRows += '<td>' + result[i]['productname'] + '</td>';      
        tableRows += '<td>' + qtyArray['carton'] + '</td>'; 
        tableRows += '<td>' + qtyArray['single'] + '</td>'; 
        tableRows += '<td class="quantityField"><input class="quantityInput" type="text" name="'+result[i]['id']+'" value="0" data-product-id="'+result[i]['id']+'" data-max-value="'+result[i]['quantity']+'"></td>'; 
        tableRows += '</tr>'; 
       } 
      }); 
     } 
     $('#prodList').append(tableRows); 
    } 
}); 

しかし、私は次のエラーを取得:私は私のコードを単純化しようとしました、私はこの部分を入れたときに

Cannot read property 'id' of undefined 

をが、内側のAJAX呼び出しの外

  tableRows += '<td>' + result[i]['id'] + '</td>'; 
      tableRows += '<td>' + (i+1) + '</td>'; 
      tableRows += '<td>' + result[i]['productname'] + '</td>';      
      tableRows += '<td>' + qtyArray['carton'] + '</td>'; 
      tableRows += '<td>' + qtyArray['single'] + '</td>'; 
      tableRows += '<td class="quantityField"><input class="quantityInput" type="text" name="'+result[i]['id']+'" value="0" data-product-id="'+result[i]['id']+'" data-max-value="'+result[i]['quantity']+'"></td>'; 
      tableRows += '</tr>'; 

result変数はアクセス可能ですが、qtyArrayではありません。私はそれがまだ開始されていないためだと思います。

は、どのように私は自分のテーブルを更新するresultqtyArrayの両方を得ることができます。

EDIT:

ここでは、最初のAJAX呼び出しから来た結果のサンプルです: https://jsfiddle.net/8zdey0cv/

+0

ネストされた.ajax()呼び出しの[JavaScript/jQuery変数スコープの問題]の可能な複製](http://stackoverflow.com/questions/6375399/javascript-jquery-variable-scope-issue-with-nested-ajax-通話) –

+0

問題[i]が吹き出すあなたの結果をその時点で、iの値が最終的に限界値よりも大きいこと、増加し続けていることです。クロージャを作成する必要があります。この類似の質問を参照してください:http://stackoverflow.com/questions/6375399/javascript-jquery-variable-scope-issue-with-nested-ajax-calls –

+1

@VanquishedWombatええ、あなたの権利が、なぜそれは増加し続けていますか? forループ MehdiB

答えて

-1

まあ、私はこれを行うには非常に良い方法だとは思いません。あなたのSQLクエリJOINが2倍AJAX要求を回避するため、外側と内側AJAXを結合することはできますか?

もしそうでない場合は、内部にAJAXという要求を含む別の関数を作成して、ループ内で呼び出すようにしてください。

+0

OPは再設計を要求しておらず、彼はサーバで変更を要求することができないかもしれません。また、彼がajaxの機能を正しくネストする方法の実用上の問題にかかわらず、それは有効な質問です。 –

関連する問題