猿问

为什么我从 jquery ajax 调用中得到 HTML 响应

我试图在我的 Laravel 项目中使用 jQuery UI 自动完成功能来在用户输入时显示一些建议。这是用户输入时触发的脚本:


$(".autocomplete").autocomplete({

source: function(request, response) {

    $.ajax({

        url: '/autocomplete',

        dataType: "json",

        data: {

            term : request.term,

            field : $(this.element).prop("id")

        },

        success: function(data) {

            console.log(data);

            response(data);

        },

        error: function(result, status, error) {

            console.log(result);

            console.log(status);

            console.log(error);

        }

    });

},

min_length: 0, });

这是我在 web.php 中的路线


Route::get('/autocomplete', 'SitesController@autocomplete');

最后我的控制器从数据库中检索结果。


public function autocomplete(Request $request) {

    $term = \Request::get('term');

    $field = \Request::get('field');

    $sites = Site::where($field, 'ILIKE', '%'.$term.'%')

    ->distinct()

    ->get([$field]);


    $data = [];

    foreach($sites as $key => $site) {

        $data[] = $site->$field;

    }


    return \Response::json($data);

}

这目前不起作用,但是当我直接将上述代码添加到我的路由文件时,它运行良好。


Route::get('/autocomplete', function()

{

    $term = \Request::get('term');

    $field = \Request::get('field');

    $sites = Site::where($field, 'ILIKE', '%'.$term.'%')

    ->distinct()

    ->get([$field]);


    $data = [];

    foreach($sites as $key => $site) {

        $data[] = $site->$field;

    }


    return \Response::json($data);

});

我的脚本正在返回一个 HTML 响应,这是我从控制台得到的错误:


SyntaxError: Unexpected token < in JSON at position 0

    at parse (<anonymous>)

    at ajaxConvert (VM258 app.js:18060)

    at done (VM258 app.js:18530)

    at XMLHttpRequest.<anonymous> (VM258 app.js:18832)

我不明白为什么我的脚本没有返回 JSON 而是 HTML,而当我将我的脚本放入 web.php 文件时它会返回。


神不在的星期二
浏览 100回答 2
2回答

守着一只汪

在app/Exceptions/Handler.php文件中你可以做这样的事情public function render($request, Exception $e){&nbsp; &nbsp; if ($request->wantsJson()) {&nbsp; &nbsp; &nbsp; &nbsp; $response = ... // put your response data here&nbsp; &nbsp; &nbsp; &nbsp; return response()->json($response);&nbsp; &nbsp; }&nbsp; &nbsp; ...}

吃鸡游戏

正如 aynber 所建议的,仔细查看返回的 HTML 页面,我意识到这是一个错误页面,当有人试图在没有权限的情况下访问页面时,由于中间件,我抛出了这个错误页面。我的控制器当然首先检查这个中间件。我对自动完成功能做了一个例外,现在一切正常,但我觉得我没有以好的方式处理我的中间件......
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答