首页 > 解决方案 > 无法从 laravel 中的 AJAX 调用中获取 responseText

问题描述

我有一个如下所示的 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。那么我的代码有什么问题?我无法弄清楚。请帮忙。

标签: phpjsonajaxlaravelobject

解决方案


以 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
    ]);
}

推荐阅读