Вопрос:

Ajax post возвращает несколько массивов с объектами, которые имеют несколько значений

javascript php jquery ajax

427 просмотра

1 ответ

7 Репутация автора

Итак, у меня есть php-файл, который получает сообщения из базы данных (ajax.php), и файл javascript, который делает ajax-запрос к этому файлу ajax.php (main.js).

Что я хочу: когда php отвечает несколько раз, файл js создает строку таблицы для каждого из них.

main.js:

function doAjax(variable) {
    $.ajax({
        type: "POST",
        url: "ajax.php"
        data: { content: variable },
        dataType: 'JSON',            
        success: function (response) {
            response.forEach(function(data) {
              $(".messages-table").append("<tr><th>"+from+"</th><th>"+text+"</th><th>"+date+"</th><th>"+num+"</th></tr>")
            })
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });
}

ajax.php:

<?php

...

foreach ($messages as $message) {
    $from = $message['contact_value'];
    $text = $message['message'];
    $date = $message['date'];
    $num = $user['phone_number'];
    echo json_encode(array("from"=>"$from", "text"=>"$text", "date"=>"$date", "num"=>"$num"));
?>

Но когда я делаю это, я получаю эту ошибку в консоли разработчика:

parsererror SyntaxError: Unexpected token < in JSON at position 0
    at parse (<anonymous>)
    at Qb (jquery.min.js:4)
    at A (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

ура

Автор: Leevi Источник Размещён: 13.01.2018 05:24

Ответы (1)


0 плюса

331 Репутация автора

Решение

Ваш ajax.php должен быть таким

<?php


  foreach ($messages as $message) {
    $from = $message['contact_value'];
    $text = $message['message'];
    $date = $message['date'];
    $num = $user['phone_number'];
    echo json_encode(array("from"=>$from, "text"=>$text,"date"=>$date,"num"=>$num));
?>

если вы действительно хотите использовать кавычки, используйте вместо них '' (одинарные кавычки).

И файл JavaScript.

 success: function (response) {
  var success = $.parseJSON(response);
  $(".messages-table").append("<tr><th>"+success.from+"</th><th>"+success.text+"</th><th>"+success.date+"</th><th>"+success.num+"</th></tr>");
}

Я думаю, вам не нужно использовать цикл forech, если вы каждый раз вызываете функцию doAjax.

Автор: Sanjun Dev Размещён: 13.01.2018 06:03
32x32