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

Я потратил более 6 часов, чтобы найти исключение или специальный символ, который можно найти в моем коде, но я не мог. Я проверил все похожие сообщения здесь.

Я отправляю форму с большим всплывающим окном. Сначала я использую всплывающее всплывающее окно, чтобы открыть форму, чем я отправляю все входы в main.js для проверки.

Поэтому мне просто нужен третий глаз.

У меня есть: index.html , register.php , main.js

Вот код

FORM

JS / AJAX

PHP-register.php

Вот сообщения об ошибках

Выход JSON JSON

Консоль Chrome:

хром

Консоль Firefox: Fire Fox


Что мне не хватает?

Solutions Collecting From Web of "SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON"

Тот факт, что персонаж является <заставить меня думать, что у вас есть ошибка PHP, вы пробовали эхом все ошибки.

Поскольку у меня нет вашей базы данных, я просматриваю код, пытаясь найти ошибки, до сих пор я обновил ваш JS-файл

 $("#register-form").submit(function (event) { var entrance = $(this).find('input[name="IsValid"]').val(); var password = $(this).find('input[name="objPassword"]').val(); var namesurname = $(this).find('input[name="objNameSurname"]').val(); var email = $(this).find('input[name="objEmail"]').val(); var gsm = $(this).find('input[name="objGsm"]').val(); var adres = $(this).find('input[name="objAddress"]').val(); var termsOk = $(this).find('input[name="objAcceptTerms"]').val(); var formURL = $(this).attr("action"); if (request) { request.abort(); // cancel if any process on pending } var postData = { "objAskGrant": entrance, "objPass": password, "objNameSurname": namesurname, "objEmail": email, "objGsm": parseInt(gsm), "objAdres": adres, "objTerms": termsOk }; $.post(formURL,postData,function(data,status){ console.log("Data: " + data + "\nStatus: " + status); }); event.preventDefault(); }); 

Редактирование PHP:

  if (isset($_POST)) { $fValid = clear($_POST['objAskGrant']); $fTerms = clear($_POST['objTerms']); if ($fValid) { $fPass = clear($_POST['objPass']); $fNameSurname = clear($_POST['objNameSurname']); $fMail = clear($_POST['objEmail']); $fGsm = clear(int($_POST['objGsm'])); $fAddress = clear($_POST['objAdres']); $UserIpAddress = "hidden"; $UserCityLocation = "hidden"; $UserCountry = "hidden"; $DateTime = new DateTime(); $result = $date->format('dmYH:i:s'); $krr = explode('-', $result); $resultDateTime = implode("", $krr); $data = array('error' => 'Yükleme Sırasında Hata Oluştu'); $kayit = "INSERT INTO tbl_Records(UserNameSurname, UserMail, UserGsm, UserAddress, DateAdded, UserIp, UserCityLocation, UserCountry, IsChecked, GivenPasscode) VALUES ('$fNameSurname', '$fMail', '$fGsm', '$fAddress', '$resultDateTime', '$UserIpAddress', '$UserCityLocation', '$UserCountry', '$fTerms', '$fPass')"; $retval = mysql_query( $kayit, $conn ); // Update with you connection details if ($retval) { $data = array('success' => 'Register Completed', 'postData' => $_POST); } } // valid ends }echo json_encode($data); 

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

например

 var d = ""; var json = JSON.parse(d); 

или если вы используете AngularJS

 var d = ""; var json = angular.fromJson(d); 

В chrome это привело к «Uncaught SyntaxError: Неожиданный конец ввода», но Firebug показал его как «JSON.parse: неожиданный конец данных в строке 1 столбца 1 данных JSON».

Конечно, большинство людей не поймают это, но я не защитил этот метод, и это привело к этой ошибке.

Удалить

  dataType: 'json' 

заменив его

  dataType: 'text' 

У меня такая же проблема, и я что-то нашел. Я прокомментировал строку:

dataType: 'json',

после этого это было успешно, но … когда я сделал console.log (data), он вернул основной index.html.

Вот почему у вас есть ошибка «Неожиданный токен <» и он не может разобрать.

Изменение типа данных для текста помогло dataType: 'text'

Я проверил с JSONlint, и мой формат json был правильным. Тем не менее, это была ошибка при установке dataType: 'json'

 JSON Data: {"eventinvite":1,"groupcount":8,"totalMessagesUnread":0,"unreadmessages":{"378":0,"379":0,"380":0,"385":0,"390":0,"393":0,"413":0,"418":0}} 

Вы уверены, что не используете неправильный путь в поле url ? – Я столкнулся с той же ошибкой, и проблема была решена после того, как я проверил путь, нашел ошибку и заменил его на правильную.

Убедитесь, что указанный вами URL-адрес верен для запроса AJAX и что файл существует.

Отправка данных JSON с помощью NodeJS при вызове AJAX:

 $.ajax({ url: '/listClientsNames', type: 'POST', dataType: 'json', data: JSON.stringify({foo:'bar'}) }).done(function(response){ console.log("response :: "+response[0].nom); }); 

Помните об удалении пробелов.

 app.post("/listClientsNames", function(req,res){ var querySQL = "SELECT id, nom FROM clients"; var data = new Array(); var execQuery = connection.query(querySQL, function(err, rows, fields){ if(!err){ for(var i=0; i<25; i++){ data.push({"nom":rows[i].nom}); } res.contentType('application/json'); res.json(data); }else{ console.log("[SQL005] - Une erreur est survenue"); } }); }); 

Даже если ваш JSON в порядке, это может быть проблема с кодировкой DB (UTF8). Если кодировка / сопоставление вашей базы данных UTF8, но PDO настроен неправильно (charset / обходной путь отсутствует), некоторые из них / è / ò / ì / и т. Д. В вашей БД могут разорвать вашу JSON-кодировку (все еще закодированную, но вызывающую проблемы с синтаксическим разбором). Проверьте строку подключения, она должна быть похожа на одну из следующих:

 $pdo = new PDO('mysql:host=hostname;dbname=DBname;**charset=utf8**','username','password'); // PHP >= 5.3.6 $pdo = new PDO('mysql:host=hostname;dbname=DBname','username','password',**array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")**); // older versions 

PS Устаревший, но все же может быть полезен людям, которые застряли с «неожиданным характером».

Может быть, его нерелевантный ответ, но его работа в моем случае … не знаю, что было не так на моем сервере … Я просто включил журнал ошибок на сервере Ubuntu 16.04.

 //For PHP error_reporting(E_ALL); ini_set('display_errors', 1);