2015-04-26 40 views
-1

我正在嘗試使用ajaxphp來更新表單域。如何正確響應PHP中的AJAX調用?

我的Ajax調用是這樣的:

var productId = 'productId=' + id; 

$.ajax({ 
    url: './includes/process_edit_products.php', 
    method: 'post', 
    data: productId 
}).success(function(response) { 
    // Populate the form fields with the data returned from server 
    $('#userForm') 
    .find('[name="product_id"]').val(response.product_id).end() 
    .find('[name="product_name"]').val(response.product_name).end() 
    .find('[name="product_price"]').val(response.product_price).end() 
    .find('[name="product_des"]').val(response.product_des).end(); 

    // Show the dialog 
    bootbox 
    .dialog({ 
     title: 'Edit Products', 
     message: $('#userForm'), 
     show: false // We will show it manually later 
    }) 
    .on('shown.bs.modal', function() { 
     $('#userForm') 
     .show() // Show the login form 
     .formValidation('resetForm'); // Reset form 
    }) 
    .on('hide.bs.modal', function(e) { 
     $('#userForm').hide().appendTo('body'); 
    }) 
    .modal('show'); 
}); 

PHP處理腳本是這樣的:

if ((isset($_POST['productId'])) && (is_numeric($_POST['productId']))) { // Form submission. 
    $productId = (int)$_POST['productId']; 
    //echo $productId; 

     // fetch the selected product to edit 
    $query = " SELECT product_id, product_name, price, product_des 
         FROM product 
         WHERE product_id = ? LIMIT 1"; 

    $stmt = $mysqli->prepare($query); 

    if ($stmt) { 
     // Bind "$imageId" to parameter. 
     $stmt->bind_param('i', $productId); 
     // Execute the prepared query. 
     $stmt->execute();  
     $stmt->store_result(); 
     // count rows 
     $numrows = $stmt->num_rows; 

     if ($numrows == 1) { 
      // get variables from result. 
      $stmt->bind_result($product_id, $product_name, $price, $product_des); 

     // Fetch all the records: 
     while ($stmt->fetch()) { 
      //echo $product_id; 
      //echo $product_name; 
     //echo $price; 
     //echo $product_des; 

      //$response = array('product_id' => $product_id, 'product_name' => $product_name, 'product_price' => $price, 'product_des') => $product_des; 
      //echo json_encode($Response); 

      $resultArray['product_id'] = $product_id; 
      $resultArray['product_name'] = $product_name; 
      $resultArray['price'] = $price; 
      $resultArray['product_des'] = $product_des; 
      echo json_encode($resultArray); 
     } 

      // Close the statement: 
      $stmt->close(); 
      unset($stmt); 
     } 
    } 
} 

我的問題是我不知道如何讓PHP處理返回的數據和填充表單字段與現有數據。

任何人都可以告訴我需要做什麼在我的PHP。

+0

您似乎期望成功回調中的'response'是一個JSON對象,但是您的PHP腳本僅僅回聲了幾個字符串('$ product_id','$ product_name'等)。用所有相關的數據組成一個數組,並對其進行json_encode。 – Huey

+0

@Huey,你可以告訴我如何編輯我的PHP相應。謝謝。 – user3733831

+0

@SMcCrohan編輯帖子時;請刪除像「謝謝」,「嗨」等不必要的短語。http://meta.stackexchange.com/q/2950/212576 – hjpotter92

回答

2

您似乎期待在您的success回調中作爲JSON對象的響應,但是您的PHP腳本僅迴響了幾個字符串($product_id,$product_name等)。列出所有相關數據並json_encode它。

$resultArray = array(); 
while{ 
    ... 
    $curProduct['product_id'] = $product_id; 
    $curProduct['product_name'] = $product_name; 
    $curProduct['price'] = $price; 
    $curProduct['product_des'] = $product_des; 
    $resultArray[] = $curProduct; 
} 
echo json_encode($resultArray); 

關注它,你可能需要使用解析JSON客戶端:

.success(function(response) { 
    response = jQuery.parseJSON(response) 
    $.each(response, function(index,value){ 
     ... 
    }); 
}); 

,因爲你在同一時間檢索多個產品,foreach循環需要通過所有迭代產品並據此填寫表單。

+0

我試過這樣。但仍然沒有運氣 – user3733831

+0

你的意思是這樣的'成功(函數(響應= jQuery.parseJSON(響應))' – user3733831