2015-04-26 3 views
-1

Я пытаюсь обновить поля формы, используя ajax и php.Как правильно ответить на вызов AJAX в PHP?

Мой АЯКС вызов выглядит так: сценарий обработки

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){ 
     ... 
    }); 
}); 

потому, что вы извлечения нескольких продуктов одновременно, цикл Еогеасп требуется для перебора всех продуктов и заполнить вашу форму соответственно.

+0

Я пробовал так. Но все же не удача – user3733831

+0

вы имеете в виду вот этот 'success (function (response = jQuery.parseJSON (response))' – user3733831

Смежные вопросы