Как получить строковый ответ в ajax? - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь использовать Ajax для обновления части страницы, которая показывает небольшую часть моей базы данных. Моя проблема в том, что результат, который я пытаюсь отправить обратно, имеет форму (длинной) строки, и я не могу найти способ отправить строку в качестве ответа ajax. Я абсолютный новичок в ajax, и я не знаю, как решить эту проблему.

Вот как выглядит мой ajax:

$.ajax({
            url: "{{ url('/news/lastfive') }}",
            method: 'get',
            success: function(result){
                $('#machin').html(result);
            }
        });

И функция php (I 'я работаю в Laravel, поэтому есть некоторые функции laravel):

public function lastfive(){
        $liste = DB::table('news')->latest()->limit(5)->get();
        $str = <<<HTML
        <table>
......
        <tbody>
HTML;
        foreach ($liste as $elements){
            $str .= '<tr>';
            foreach($elements as $element){
                $str .= <<<HTML
                <td>$element->author</td>
                <td>$element->message</td>
                <td>$element->date</td>
HTML; 
            }
            $str .= '</td>';
        }
        $str .= '</tbody></table>';
        return response()->json(['success'=>$str]);
    }

Когда я делаю это, моя строка $ str не может быть закодирована в формате json, и она не работает.

Я такжепопробовал это в php:

public function lastfive(){
        $liste = DB::table('news')->latest()->limit(5)->get();
        $liste = json_encode($liste);
        return response()->json($liste);
}

На этот раз мне удается вставить данные на мою html-страницу, но это гораздо менее удобно для макета и возникают проблемы с кодированием символов, отличных от ascii. Есть ли здесь лучшее решение, которое я пропускаю?

Надеюсь, этот вопрос не слишком глуп;)

1 Ответ

1 голос
/ 29 октября 2019

Есть гораздо более простой способ сделать это, используя view(). Сохраните сгенерированный HTML-файл как .blade.php файл:

table.blade.php:

<table>
    <tbody>
        @foreach ($liste as $elements)
        <tr>
            @foreach($elements as $element)
            <td>{{ $element->author }}</td>
            <td>{{ $element->message }}</td>
            <td>{{ $element->date }}</td>
            @endforeach
        </tr>
        @endforeach
    </tbody>
</table>

Затем, вместо генерации HTML-кода в PHP, загрузите файл с помощью view():

Controller:

public function lastfive(){
    $liste = DB::table('news')->latest()->limit(5)->get();
    $html = view('table')->with(['liste' => $liste])->render();

    return response()->json(['html' => $html]);
}

Таким образом, вы можете запросить вашу базу данных, передать элементы в ваше представление table.blade.php, использовать render() для преобразования его в строку, содержащую ваш HTML,и, наконец, верните HTML через response()->json()

Edit:

Ваш ответ AJAX должен быть слегка изменен:

$('#machin').html(result.html);

Target result.html, чтобы установить содержимое элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...