簡體   English   中英

為什么我從jquery ajax調用中獲取HTML響應

[英]Why am I getting HTML response from jquery ajax call

我試圖在我的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文件中時它會這樣做。

正如aynber建議的那樣,仔細查看返回的HTML頁面,我意識到這是一個錯誤頁面,當我有人試圖在沒有權限的情況下訪問頁面時,感謝中間件。 我的控制器當然首先要檢查這個中間件。 我為自動完成功能做了一個例外,現在一切正常,但是我覺得我沒有好好處理我的中間件......

app/Exceptions/Handler.php文件中你可以做這樣的事情

public function render($request, Exception $e)
{
    if ($request->wantsJson()) {
        $response = ... // put your response data here
        return response()->json($response);
    }
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM