Ajax SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON

Ладно люди. Я получил эту ошибку, и я попробовал все решения, которые люди с той же проблемой использовали для ее решения. Ничего такого. Мне нужно использовать функцию jQuery «ajax», чтобы получить некоторые данные из php, а затем распределить данные в некоторых входах. Если я использую text как dataType, он работает как шарм, но с json dataType я получаю эту ошибку:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Мой код:

js

$.ajax({
            type: 'get',
        url: globals.rootdir + '/controller.php?op=do_something&module=56',
        dataType: 'json',
        data: {
            year: previouslyDeclaredYearVar
        },

            success: function (data) {

                alert('good');

        },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);

            }
    });

php - функция контроллера do_something

if (!isAjaxRequest()){
    return;
  }
    header("Content-type: application/json");
    ... do things
    echo json_encode(['result'=>'test-ajax-ok']);

Скорее всего, у вас есть ошибка в вашем php-коде, которая повреждает ваш формат json. Или у вас есть предупреждения php.

BlackNetworkBit 05.09.2018 18:33

Какой data возвращается вашему обработчику success?

showdev 05.09.2018 18:36

проверьте наличие пробелов в выводе, посмотрев на вкладку сети консоли браузера.

Lawrence Cherone 05.09.2018 18:37

Вы пытались принять данные как строку и просто посмотреть, что с ними не так, вместо того, чтобы позволить $ попытаться проанализировать их для вас ... я имею в виду "тип данных".

Yousef_Shamshoum 05.09.2018 18:37

Также не используйте alert, используйте console.info() и научитесь жить в окне инструментов разработчика; p

Lawrence Cherone 05.09.2018 18:38

Что произойдет, если вы удалите header("Content-type: application/json"); до эха? По моему опыту, в этом не должно быть необходимости.

Dave 05.09.2018 19:45

Как выглядят данные JSON, не видя, что это просто предположение, это может быть так же просто, как \s<?php, пробел или возврат строки перед тегом открытия / закрытия PHP (они тоже выводятся).

ArtisticPhoenix 05.09.2018 19:53

@Dave - на самом деле некоторые браузеры возвращают data в виде строки json без правильного заголовка, тогда вам нужно вручную проанализировать его, некоторые старые браузеры попытаются загрузить его как файл с ним ...: - /

ArtisticPhoenix 05.09.2018 19:55

@ArtisticPhoenix интересно ... спасибо за информацию. Я предполагаю, что это были бы старые (э-э) браузеры, которые могли бы это сделать?

Dave 05.09.2018 19:56

Да, я думаю, что это был IE8 или IE9, может быть, он загрузит его как файл, если вы вставите заголовок, я обычно вставляю его сейчас, поэтому я не могу сказать, какой из текущих когда-то не распознал бы его как правильный JSON, я занимался веб-разработкой sense 2008, так что было время, когда мне приходилось иметь дело даже с IE6 ... (который был старым даже тогда, но все еще использовался) lol, часы, которые я трачу только на этот браузер, просто смешны.

ArtisticPhoenix 05.09.2018 21:47

Обычно то, что я делаю сейчас, это что-то вроде function(data){ if (typeof data == 'string' ){ try{ data = $.parseJSON(data); }catch(e){ data = {'error' : e.message, 'body' : data}; } в этом случае, если это JSON, все в порядке, если это строка, которую он пытается проанализировать, если не может, то устанавливается data.error (я использую это для ошибок на стороне сервера), тогда я помещаю содержимое строковые данные в свойстве. Таким образом, если это ошибка на стороне сервера, которая не была должным образом обнаружена и обернута в JSON, мне есть на что посмотреть. Это охватывает большую часть материала. Я обычно использую обратный вызов .allways для 404 и таких ошибок тоже

ArtisticPhoenix 05.09.2018 21:57

@ Дэйв, я уже пробовал.

dgtal 06.09.2018 08:58

@ArtisticPhoenix, я попробую и дам тебе знать

dgtal 06.09.2018 08:59

@BlackNetworkBit Нет, потому что он работает, если я изменю dataType на 'text'

dgtal 06.09.2018 09:00

Пожалуйста, проверьте запрос от сервера с помощью инструментов отладки вашего браузера. Ваша ошибка - это типичная неправильно сформированная строка Json.

BlackNetworkBit 06.09.2018 09:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
15
803
0

Другие вопросы по теме