如何正确响应PHP中的AJAX调用?

时间:2015-04-26 03:02:22

标签: php jquery ajax

我正在尝试使用ajaxphp更新表单字段。

我的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中需要做什么。

1 个答案:

答案 0 :(得分: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循环来遍历所有产品并相应地填充表单。