Почему я получаю ответ HTML от вызова jquery ajax - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь использовать автозаполнение пользовательского интерфейса jQuery в моем проекте Laravel, чтобы показать некоторые предложения, когда пользователь печатает. Вот скрипт, который запускается, когда пользователь вводит:

$(".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.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

в app/Exceptions/Handler.php файле вы можете сделать что-то вроде этого

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

0 голосов
/ 09 мая 2019

По предложению aynber, внимательно изучив возвращенную HTML-страницу, я понял, что это страница с ошибкой, которую я выбрасываю благодаря промежуточному программному обеспечению, когда кто-то пытается получить доступ к странице без прав. И мой контроллер, конечно, сначала проверял это промежуточное ПО. Я сделал исключение для функции автозаполнения, и теперь все работает нормально, хотя я чувствую, что не справляюсь со своими промежуточными программами ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...