2016-07-21 2 views
0

데이터베이스에서 데이터를 가져 오려고하는데 다음 코드는 올바르게 작동하고 배치 번호에 데이터베이스의 레코드가 하나만있는 경우 드롭 다운을 표시하지만 추가 할 때 같은 배치 번호에 대해 더 많은 재고가 배치 번호에서 드롭 다운을 보여주는 것을 멈추는 반면에 json없이 동일한 코드를 수행하면 모든 배치 번호가 표시되지만 다른 데이터를 가져와야하므로 json으로 처리하려고합니다. 또한 다른 divs에 표시됩니다 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 

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; 

?>

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) : 
     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

자바 스크립트에서 json 객체를 반복하여 반환 된 모든 HTML 데이터를 가져와야합니다. – Sean

답변

1

당신의 while 루프가 $data 있도록 외부에서 정의되며, 결과는 자바 스크립트에서 루프

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

고마워요. 딱정벌레 –

관련 문제