JQuery AJAX получить результаты базы данных, используя PHP JSON кодировать
У меня есть этот PHP-код, который является вызовом с использованием jQuery Ajax, который запрашивает базу данных и получает результаты, а затем JSON кодировать результаты
//$rows is another query
foreach($rows as $row) {
$sql = 'SELECT field1, field2 FROM table WHERE field1= :field';
$stmt = $db->prepare($sql);
$stmt->bindValue(':field', trim($row['field_1']));
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($array);
}
Выходной JSON выглядит так
[{"field1":"J1","field2":"0088","field3":"2928868"}][{"field1":"J2","field2":"0171","field3":"2928868"}][{"field1":"J2","field2":"0249","field3":"2928868"}]
Проблема, которую я получаю, состоит в том, чтобы обработать это в ответе Ajax. То, что я хотел бы сделать, это перебрать каждый массив / строки и отобразить данные, но responseText показывает ошибку.
Я думал, что это должно выглядеть так, но я не знаю наверняка.
[{"field1":"J1","field2":"0088","field3":"2928868"},{"field1":"J2","field2":"0171","field3":"2928868"},{"field1":"J2","field2":"0249","field3":"2928868"}]
У меня вопрос, правильно ли я делаю код json_encode и как мне вывести каждую строку?
$.ajax({
type: "POST",
url: "check.php",
data: { order: order },
dataType: "json",
cache: false,
success: function(response) {
if(response.length != 0) {
//output results here
}
else {
$('#foo').text('Order number not found!!');
}
// set the focus to the order input
$('#order').focus().val('');
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log('An Ajax error was thrown.');
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
1 ответ
Вы должны JSON-кодировать весь вывод вместо вывода json-кодированной версии каждой строки:
$output = array();
//$rows is another query
foreach($rows as $row) {
$sql = 'SELECT field1, field2 FROM table WHERE field1= :field';
$stmt = $db->prepare($sql);
$stmt->bindValue(':field', trim($row['field_1']));
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
$output[] = $array;
}
echo json_encode($output);
Отвечая на ваш вопрос, чтобы работать с вашим JSON в JavaScript, вы рассматриваете его как массив объектов. Вы даже можете использовать jQuery, чтобы помочь вам просмотреть результаты с помощью $.each:
if(response.length != 0) {
$.each(response, function(index, row) {
console.log(row);
// Access your row variables like so:
// row.field1, row.field2, row.field3, etc.
}
}
Если вы предпочитаете циклически проходить через, вы можете сделать следующее:
// Let i start at zero. If the response array length is less than i, execute the block, then increment i by 1.
for(var i = 0; response.length < i; i += 1) {
}
Связанный Вопрос / Дальнейшее чтение: Как анализировать JSON в JavaScript