2016-07-21 7 views
0

データベースからデータを取得しようとしていますが、バッチ番号にデータベース内のレコードが1つしかないのに、同じバッチ番号に対してより多くの在庫があります。バッチ番号でドロップダウンを表示しなくなります.Jsonなしで同じコードを実行すると、すべてのバッチ番号が表示されますが、私は他のデータまた、私が間違ってやっていることを親切に助けてくれるdbから、他の部署にも表示されます。ajaxを使用している複数のデータで、jsonが機能しない

jQueryの/アヤックス

<script> 
    function getBatch(id) { 

     var product_id = jQuery('#product'+id).val(); 
     jQuery.ajax({ 
      type: 'POST', 
      url: 'get_Batch.php', 
      data: { product_id: product_id }, 
      dataType : 'JSON', 
      success: function(data) { 
       jQuery('#batch'+id).html(data.batch_option); 
       jQuery('#available_qty'+id).val(data.avaliable_quantity); 
      } 
     }); 

    } 
</script> 

PHP

<?php 

include('includes/config.php'); 

if(isset($_POST['product_id'])) : 

    $product_id = $_POST['product_id']; 
    $get_batch = mysqli_query($conn, "Select * from products JOIN products_stock ON products.p_id='$product_id' AND products.p_id=products_stock.p_id"); 
    if(mysqli_num_rows($get_batch) > 0) : 
     header('Content-Type: application/json'); 
     while($batch = mysqli_fetch_object($get_batch)) : 
      $data = [ 
         'batch_option'   => "<option value=".$batch -> batch_no."> 
                 ".$batch -> batch_no." 
                </option>", 
         'avaliable_quantity' => $batch -> p_available 
        ]; 
      echo json_encode($data); 
     endwhile; 
    else : 
     header('Content-Type: application/json'); 
     $data = [ 
        'batch_option' => "<option value='No batch found'> No batch found </option>", 
        'avaliable_quantity' => 'Not avaliable' 
       ]; 
     echo json_encode($data); 
    endif; 
endif; 

?>

私はこのように行う場合には、

ドロップダウン内の1つのバッチ番号に対するすべてのレコードを表示します
<?php 

include('includes/config.php'); 

if(isset($_POST['product_id'])) : 

    $product_id = $_POST['product_id']; 
    $get_batch = mysqli_query($conn, "Select * from products JOIN products_stock ON products.p_id='$product_id' AND products.p_id=products_stock.p_id"); 
    if(mysqli_num_rows($get_batch) > 0) : 
     while($batch = mysqli_fetch_object($get_batch)) : 
     ?> <option value="<?php echo $batch -> id; ?>"><?php echo $batch -> id; ?></option> <?php 
     endwhile; 
    endif; 
endif; 

?>

+0

whileループの後に 'echo json_encode($ data);'を移動する必要があります。ループの中で、それは無効な複数のjson符号化データをエコーし​​ています。 '$ data = ...'を '$ data [] = ... 'に変更する必要もあります – Sean

+0

JavaScriptのjsonオブジェクトをループして、返されたすべてのHTMLデータを取得する必要があります – Sean

答えて

1

あなたwhileループが$dataように、それの外で定義され、その結果はJavaScriptでループ

header('Content-Type: application/json'); 
$data = []; //will store results 
while($batch = mysqli_fetch_object($get_batch)) : 
    $data[] = [...]; //add next result  
endwhile; 
echo json_encode($data); //encode and return all results. 

$dataに追加されている変更、あなたはまた、どのように変更する必要がありますHTMLを入力します。現在のコードでは、data.batch_optiondata.avaliable_quantityがドキュメントに追加されます。しかし、いくつかの結果が得られたら、dataは配列になるので、メンバーをループしたり、各メンバーをドキュメントに追加することはありません。

success: function(data) { 
    //loop through each result in data 
    data.forEach(function(result){ 
     var opt = result.batch_option; 
     var qty = result.avaliable_quantity; 

     //Todo: add opt and qty to the right DOM elements 
    }); 
} 
+0

jqueryコードを記述しますか? –

+0

私はちょっとしたことを始めました。私はあなたが残りの部分を解決すると確信しています。 – BeetleJuice

+0

ありがとうビートル –

関連する問題