Мне трудно понять, как правильно прочитать ответ JSON из запроса jQuery $ .post ().
В приведенном ниже коде jQuery я заполняю ассоциативный массив строк из элементов из DOM на основе соответствующего «color_entry_id», который я использую в качестве ключа:
var image_links = {}; $(this).find('input[name="color_id"]').each(function() { var color_entry_id = $(this).val(); var image_link = $(this).parent().find('input[name="edit_image"].' + color_entry_id).val(); image_links[color_entry_id] = image_link; });
Затем я делаю запрос POST, отправляя свой массив «image_links»:
$.post( "test.php", { id: product_id, "images[]": jQuery.makeArray(image_links) }, function(data) { var response = jQuery.parseJSON(data); $.each(response.images, function(index, item) { alert(item); }); } );
Кроме того, как показано выше, я пытаюсь пропустить массив ответов и выводить каждый элемент, который я хочу быть строкой, но я получаю «[object Object]» в качестве предупреждаемого значения. Я не знаю, как заставить его отображать строки, которые я пытаюсь отобразить!
Вот код PHP для test.php:
<?php $product_id = $_POST['id']; $images = $_POST['images']; $response = array(); $response['id'] = $product_id; $response['images'] = $images; echo json_encode($response); ?>
И вот как выглядит соответствующая часть DOM:
<input type='hidden' value='{{ color_entry_id }}' name='color_id' /> <p><img src='{{ color_img_link }}' /></p> <p>Image Link: <input class='{{ color_entry_id }}' name='edit_image' type='text' size='150' value='{{ color_img_link }}' /></p> <div class='colors {{ color_entry_id }}'> <div class='img_color'> <a href='javascript:void' style='background:...' class='selected'></a> <p>...</p> </div> </div>
Мне интересно, возможно ли, что я неправильно кодирую JSON на стороне PHP или если я просто неправильно прохожу через ответ в jQuery. Любая помощь высоко ценится!!
Хорошо, тогда … объект данных, который вы возвращаете из сообщения: {"id":"abc","images":[{"color123":"somelink.com\/123","color223":"somelink.com\/223"}]};
Если вы измените свое предупреждение, вы найдете значения, которые вы ищете:
$.post( "test.php", { id: product_id, "images[]": jQuery.makeArray(image_links) }, function(data) { var response = jQuery.parseJSON(data); var images = response.images[0]; for (var i in images){ alert(images[i]); } } );
$ .post ожидает xml по умолчанию, вам нужно указать формат ответа
$.post( "test.php", { id: product_id, images : jQuery.makeArray(image_links) }, function(response) { // Response is automatically a json object for(var i = 0; i < response.images.length; i++) { alert(response.images[i]); } }, 'json' // <-- HERE );
Кроме того, рассмотрите возможность добавления заголовка типа контента в ваш php-скрипт
<?php header("Content-type: application/json"); // Adding a content type helps as well $product_id = $_POST['id']; $images = $_POST['images']; $response = array(); $response['id'] = $product_id; $response['images'] = $images; echo json_encode($response); ?>
Достаточно простой пример:
$.post('test.php', {"id": 42}, function (json) { console.log(json); }, 'json');
Пример PHP
$number = rand(1,$_POST["id"]); return print json_encode($number);