无法从 laravel 中的 AJAX 调用中获取 responseText

Posted

技术标签:

【中文标题】无法从 laravel 中的 AJAX 调用中获取 responseText【英文标题】:Unable to get responseText from an AJAX call in laravel 【发布时间】:2018-10-21 23:29:02 【问题描述】:

我有一个如下所示的 AJAX 调用:

function getPosts()
    $.ajaxSetup(
        headers: 
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        
    );
    $.post("get-posts",
        function(data, status)
            console.log(data);
            console.log(status);
        );

在我的 routes/web.php 中,我有:

Route::post('get-posts','PagesController@getPosts');

controller_function 看起来像这样:

public function getPosts()
        $posts = DB::table('users_queries')->get();
        echo json_encode($posts);
    

但问题是控制台记录了一个空字符串。为了确保我正在转换一个 php 对象,我也调用了 gettype($posts); 函数,它返回了对象。然后我认为问题可能出在<script> 标签中,并尝试了这个typeof(data) 并返回了字符串,以确保数据是字符串。但是当我运行console.log(data.length); 时,我很震惊,因为它记录为 0。但我能够执行以下操作:

public function getPosts()
    $posts = DB::table('users_queries')->where('id', 1)->first();
    echo $posts->author;

一切都很顺利,但我无法获得整个 json。那么我的代码有什么问题?我无法弄清楚。请帮忙。

【问题讨论】:

你为什么不使用 Eloquent 而不是 DB。 Eloquent 有 toJson() 可以轻松地将集合转换为 JSON 序列化字符串。 laravel.com/docs/5.6/collections#method-tojson 用这个替换你的回声 -> return response(['data'=> $posts]) 【参考方案1】:

以 JSON 格式返回您的响应:https://laravel.com/docs/5.6/responses#json-responses

public function getPosts()
    $posts = DB::table('users_queries')->get();
    return response()->json([
        'status' => 'success',
        'data'   => $posts
    ]);

【讨论】:

这显示500 Internal Server 错误并且不起作用! 查看storage/logs/laravel.log 或您正在记录的任何日志文件以了解您遇到的错误,清除日志文件并运行 ajax 可能更容易

以上是关于无法从 laravel 中的 AJAX 调用中获取 responseText的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中获取图像并在 laravel 中使用 ajax 以编辑形式预览它?

在 Laravel 中调用 ajax 后数据表无法正常工作

如何从控制器获取记录到 Ajax laravel 5.2

在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据

laravel 8 没有从 ajax 请求中获取数据

如何将数据从ajax get方法发送到laravel中的控制器?