Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471

Странная ошибка json.parse()

15.02.2018, 11:49. Показов 4702. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане. Столкнулся с проблемой, которую решить пока не могу.
На сайте большинство получение данных происходит через ajax.
Так вот, самое интересное, что у большинства людей работает все нормально, но есть некоторые у которых json.parse() выдает ошибку. Причем этот человек может с одного компьютера сидеть и все работает нормально, а с другого у него ошибку выдает.
И так. Пример...
Получаю список оценок за комментарии:
JavaScript
1
2
3
4
5
6
7
8
9
function QuoteNotif(type) {
ajax({
   method: 'POST',
   action: 'QuoteNotif',
   data: {
    type:type
    }
});
}
Далее php начинает обработку и формирование json
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function QuoteNotif($ajax, $errors) {
       $sql = DbMysql::getInstance();
       $func = new Options(); 
       
        if($_REQUEST['type'] == '1'){
        $quote_user_sql = $sql->run("select *,date_format(date,'%d %b %Y %H:%i:%s') as date from ".MY_PREFIX."_QuoteNotification where user_id = ? order by id DESC",array($_SESSION['ID']));
        }else{
        $quote_user_sql = $sql->run("select *,date_format(date,'%d %b %Y %H:%i:%s') as date from ".MY_PREFIX."_Notification where toUserId = ? order by id DESC",array($_SESSION['ID']));
        } 
        
      if($quote_user_sql->rowCount() > 0){
        while($Rows = $quote_user_sql->fetch()){
        $title = $func->GetOne("title","".MY_PREFIX."_news","id",$Rows['news_id']);
        if($_REQUEST['type'] == '1'){ $Rows['text'] = '0';
        $link = '/news/'.$Rows['news_id'].'/'.$Rows['id'].'/'.$Rows['id_com'].'/quote/#msg'.$Rows['id_com'];
        }else{
        if($Rows['type']){$txt="msg";}else{$txt="quote";}$Rows['username'] = $Rows['fromUsername'];
        $msgCom = $func->GetOne("quote_id","".MY_PREFIX."_comments","id",$Rows['idCom']);
        $link = '/news/'.$Rows['news_id'].'/'.$Rows['id'].'/'.$msgCom.'/notif/#'.$txt.$Rows['idCom'];
        }
        $res[] = array("id" =>$Rows['id'], "username" => $Rows['username'], "link" => $link, "title" =>$title, "text" =>$Rows['text'], "date" => $Rows['date']);
        }
 
        }else{
        $res = '0';
        }
        $ajax->response['data'] = array("NOTIF" => $res, "TYPE" => $_REQUEST['type']);
       if (!$errors->exist()) $ajax->response['action'] = 'QuoteNotifReturn'; // JS Функция будет вызвана на стороне клиента в случае успешного ответа от сервера
 
     }
И теперь пытаемся принять объект
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function ajax(params) { // Описываем функцию отправки запроса
  params.data.action = params.action;
  delete params.action;
  params.url = '/systemDir/classes/ajax.php'; // Путь до файла с нашими функциями
  params.error = function(xhr, err) {
  var responseTitle= $(xhr.responseText).filter('title').get(0);
   $('#newNews').fadeIn(500);
   $('#newNews').html($(responseTitle).text() + "\n" + formatErrorMessage(xhr, err) );
   setTimeout(function(){$('#newNews').fadeOut(500);}, 3000);
  }
  var request = $.ajax(params);
  request.then(function(response) {
    try {
            var json = JSON.parse(response);
            if (json.errors) {
           // Обработчик ошибок
           errorFunction(json.errors);
           }
           if (json.action) window[json.action](json.data); // Запускаем коллбек с полученными данными в качестве параметра
        } catch (e) {
            // is not a valid JSON string
    $('#newNews').fadeIn(500);
    $('#newNews').html("Обработка JSON - не удалось распарсить.<br /> Пожалуйста, сообщите об ошибке администратору!");
    setTimeout(function(){$('#newNews').fadeOut(500);}, 5000);
        }
 
    });
 
}
Так вот... В большинстве случаев все и у всех работает нормально, но вот есть люди, у которых вылетает "Обработка JSON - не удалось распарсить"

Я пробовал к одному такому подключаться удаленно и смотрел что происходит в браузере.
А ничего необычного! Вот пример того что получаю я, у меня все работает (копировал из браузера из дебага на вкладке responce):
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{,}
action
:
"QuoteNotifReturn"
data
:
{NOTIF: [{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}],}
NOTIF
:
[{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}]
0
:
{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}
date
:
"15 Feb 2018 10:42:20"
id
:
"139821"
link
:
"/news/77278/139821/903190/notif/#quote903196"
text
:
"Dan оценил ваш ответ (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Dan"
TYPE
:
"2"
errors
:
""
И вот что у того человека:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{,}
action
:
"QuoteNotifReturn"
data
:
{NOTIF: [{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",},],}
NOTIF
:
[{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",},]
0
:
{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",}
date
:
"15 Feb 2018 05:07:01"
id
:
"139768"
link
:
"/news/77278/139768/0/notif/#msg902945"
text
:
"Kon оценил ваш комментарий (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Kon"
1
:
{id: "139754", username: "Витян", link: "/news/77278/139754/902857/notif/#quote902909",}
date
:
"14 Feb 2018 23:23:57"
id
:
"139754"
link
:
"/news/77278/139754/902857/notif/#quote902909"
text
:
"Витян оценил ваш ответ (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Витян"
TYPE
:
"2"
errors
:
""
У него выдает ошибку json.

Но дама, на компьютере он говорит что все работает как надо. В браузере ctrl+f5 не помогает. Думал может файлы старые из кэша работают и мешают выполнению, но не помогает...
Всю голову сломал, помогите советом, что может быть?

Добавлено через 6 минут
Ах да... Нужно показать как json формируется
PHP
1
2
3
4
5
6
7
Class Ajax {
  public $response = ['data' => '', 'errors' => '', 'action' => '']; // Структура ответа. В data будет храниться ответ, в errors - ошибки, в action - функция, которая будет вызвана в JS после ответа от сервера
 
  function send() {
    echo json_encode($this->response, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); // Ответ от сервера будет сериализован в формат JSON
  }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2018, 11:49
Ответы с готовыми решениями:

Ошибка при вызове JSON.parse
Мне необходимо передать ассоциативный массив, взятый из базы данных при помощи php, в js. Таблица хранит 3 поля: place - строка, и 2 - и...

Не работает JSON.parse, ошибка Unexpected token o
подскажите пожалуйста почему может не работать: var obj=JSON.parse (&lt;?=$Arrbankomat?&gt;); расшифровка из дебагера: var...

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Всем привет, пытаюсь произвести запрос к обработчику c помощью AJAX, выдает ошибку при парсинге JSON че за фигня? гляньте плииз ребята ...

6
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
15.02.2018, 12:19
Знакомый код...
Не могли бы вы полученную JSON-строку опубликовать именно как строку, а не вот это вот на 58 строк?

Добавлено через 11 минут
Ещё было бы очень неплохо увидеть именно ту JSON-строку, которая выбрасывает ошибку парсинга.
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
15.02.2018, 12:34  [ТС]
Balanaar, Вот из своего браузера копирую
JSON
1
{"data":{"NOTIF":[{"id":"139833","username":"Kon","link":"\/news\/77278\/139833\/0\/notif\/#msg903225","title":"Тестовая новость","text":"Kon оценил ваш комментарий (\u003Cspan style=\u0022color:green;\u0022\u003E+ 1\u003C\/span\u003E балл).","date":"15 Feb 2018 12:23:14"},{"id":"139821","username":"Dan","link":"\/news\/77278\/139821\/903190\/notif\/#quote903196","title":"Тестовая новость","text":"Dan оценил ваш ответ (\u003Cspan style=\u0022color:green;\u0022\u003E+ 1\u003C\/span\u003E балл).","date":"15 Feb 2018 10:42:20"}],"TYPE":"2"},"errors":"","action":"QuoteNotifReturn"}
К человеку у которого ошибка, пока не могу подключится к сожалению

Добавлено через 3 минуты
Как только человек появится в сети, то я обязательно постараюсь скопировать у него
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
15.02.2018, 13:04
Цитата Сообщение от MirDj Посмотреть сообщение
JavaScript
1
2
3
4
5
6
} catch (e) {
  // is not a valid JSON string
  $('#newNews').fadeIn(500);
  $('#newNews').html("Обработка JSON - не удалось распарсить.<br /> Пожалуйста, сообщите об ошибке администратору!");
  setTimeout(function(){$('#newNews').fadeOut(500);}, 5000);
}
Было бы не плохо увидеть и саму ошибку. e.message хотя бы в консоль...
1
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
15.02.2018, 13:41  [ТС]
j2FunOnly, Как только смогу подключится к человеку, так сразу отпишусь...

Добавлено через 35 минут
j2FunOnly, Огромное вам спасибо за
Code
1
e.message
. Благодаря этому получил в консоль:
Code
1
Ошибка JSON: DivAllNotif.append is not a function
А это уже проблема в функции была... В чем я именно накосячил:
вот код:
JavaScript
1
2
 var DivAllNotif = document.createElement('div');
     DivAllNotif.id = 'AllNotif';
А далее, я пытался в этот див вставить другой, так:
JavaScript
1
 DivAllNotif.append(DivButtonClear);
Но
Code
1
DivAllNotif
не являлся объектом jquery.
И сейчас я подправил на:
JavaScript
1
 $(DivAllNotif).append(DivButtonClear);
И все заработало... Странно что большинство браузеров понимало такую конструкцию, а какие-то матюкались...
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
15.02.2018, 13:52
Цитата Сообщение от MirDj Посмотреть сообщение
Странно что большинство браузеров понимало такую конструкцию, а какие-то матюкались
Метод append() для HTMLElement является экспериментальным, а значит поддерживается в очень ограниченном количестве браузеров. В частности Chrome 54+, Firefox 49+, IE/Edge поддержка отсутствует и т.д.
Полная таблица совместимости: https://developer.mozilla.org/... patibility
1
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
15.02.2018, 13:53  [ТС]
Balanaar, Спасибо за информацию и что откликнулись!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2018, 13:53
Помогаю со студенческими работами здесь

Код 200 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Ребята подскажите плиз, пытаюсь добавить форму отправки сообщений на сайт. После отправки выдает вот такую ошибку : SyntaxError:...

Ошибка "json.parse unexpected character"
Реализую на сайте систему комментариев. Добавление комментариев в базу происходит путём передачи AJAX запроса. При отправке запроса, в...

JSON.parse
Помогите пожалуйста разобраться. Постараюсь кратко описать суть скрипта. setInterval каждую секунду выполняет функцию, которая пост...

Не работает JSON.parse
Из php передаю в js массив $pd_plan. Array ( =&gt; Array ( =&gt; 0 =&gt; 60 ...

Не работает JSON.parse
Подскажите почему выводит ошибку? Ошибка возникает когда вывожу JSON.parse(). Правила форума 5. Запреты и ограничения 5.18...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru