首页 > 解决方案 > 如何在ajax中获得字符串响应?

问题描述

我正在尝试使用 Ajax 刷新显示我的数据库的一小部分的页面的一部分。我的问题是我试图发回的结果是(长)字符串的形式,我找不到将字符串作为 ajax 响应发送的方法。我是 ajax 的初学者,我不知道如何解决这个问题。

这就是我的 ajax 的样子:

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

还有 php 函数(我在 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 字符的编码存在问题。这里有没有我想念的更好的解决方案?

我希望这个问题不会太愚蠢;)

标签: ajaxlaravel

解决方案


有一种更简单的方法可以做到这一点,使用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>

然后,不要在 PHP 中生成 HTML,而是通过以下方式加载文件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 的字符串,最后通过返回 HTMLresponse()->json()

编辑:

您的 AJAX 响应应稍作更改:

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

result.html设置元素内容的目标。


推荐阅读