Laravel API возвращает недопустимый JSON

В routes/api.php я создал следующий маршрут

Route::get('/config', function(){
    return response()->json([
        'cdn' => cdn_url(),
        'slide_image_path' => '/uploads/front-slides/',
        'offer_image_path' => '/uploads/offers/',
        'offer_image_thumb_path' => '/uploads/offers/thumbs/'
    ]);
});

В браузере я делаю

$.ajax({
    url : 'https://www.example.com/api/config',
    success : function(response){
        var data = JSON.parse(response);
        console.log(data);
    }
});

и получаю ошибку "Неожиданный токен o в JSON в позиции 1"; Но когда я использую json_encode() ядра php, ответ json успешно анализируется.

Также, когда я использую https://jsonformatter.curiousconcept.com/ для проверки JSON, он может анализировать JSON без каких-либо проблема независимо от того, что я использую (json_encode() или response()->json()). Но это также дает предупреждение о недопустимом JSON.

До сих пор я наблюдал, что когда я использую json_encode(), ответ содержит заголовок «Кодировка содержимого: gzip». Но когда я использую Laravel response()->json(), заголовок Content Encoding: gzip отсутствует.

Я также пытался установить этот заголовок вручную с помощью функции header('Content-Encoding: gzip') при использовании response()->json(). Но тогда браузер выдает ошибку "net::ERR_CONTENT_DECODING_FAILED";

Я думаю, что это проблема, связанная с кодировкой контента или кодировкой символов.


person Amarjit Singh    schedule 13.02.2018    source источник
comment
вам не нужно разбирать его, используйте его как есть   -  person Sohel0415    schedule 13.02.2018


Ответы (1)


Кажется, в вашем ответе нет ничего плохого. Проблема заключается в том, когда вы получаете/анализируете данные.

Попробуйте использовать метод stringify:

$.ajax({
    url : 'https://www.example.com/api/config',
    success : function(response){
        var data = JSON.parse(JSON.stringify(response));
        console.log(data);
    }
});
person Kenny Horna    schedule 13.02.2018