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

Другие вопросы по тегам