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

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

15.02.2018, 11:49. Показов 4639. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru