SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON
Я потратил более 6 часов, чтобы найти исключение или специальный символ, который можно найти в моем коде, но я не мог. Я проверил все похожие сообщения здесь.
Я отправляю форму с большим всплывающим окном. Сначала я использую всплывающее всплывающее окно, чтобы открыть форму, чем я отправляю все входы в main.js для проверки.
Итак, мне просто нужен третий глаз.
У меня есть: index.html
, register.php
, main.js
Здесь код
ФОРМА
JS/AJAX
PHP-register.php
Здесь отображаются сообщения об ошибках
Выход JSON
![json]()
Консоль Chrome:
![chrome]()
Консоль Firefox:
![firefox]()
Что мне не хватает?
Ответы
Ответ 1
Тот факт, что символ является < заставьте меня думать, что у вас есть ошибка 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 Edit:
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('d-m-Y-H: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);
Ответ 2
В интересах поисковиков, которые хотят решить подобную проблему, вы можете получить аналогичную ошибку, если ваш ввод пустой строки.
например.
var d = "";
var json = JSON.parse(d);
или если вы используете AngularJS
var d = "";
var json = angular.fromJson(d);
В chrome это привело к "Uncaught SyntaxError: Неожиданный конец ввода", но Firebug показал его как "JSON.parse: неожиданный конец данных в строке 1 столбца 1 данных JSON".
Конечно, большинство людей этого не поймают, но я не защитил этот метод, и это привело к этой ошибке.
Ответ 3
Удалить
dataType: 'json'
заменив его на
dataType: 'text'
Ответ 4
У меня такая же проблема, и я что-то нашел.
Я прокомментировал строку:
dataType: 'json',
после этого он был успешным, но... когда я сделал console.log(data), он вернул основной index.html.
Вот почему у вас есть "Неожиданный токен <" ошибка, и он не может разобрать.
Ответ 5
Изменение типа данных на текст помогло
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}}
Ответ 6
Отправка данных 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");
}
});
});
Ответ 7
Я получил ту же ошибку при получении данных из файла JSONсм. Прикрепленную ссылку
"SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"
Итак, я проверяю путь к файлу json, который неверен,
const search = document.getElementById("search");
const matchList = document.getElementById("match-list");
//search json data and filter
const searchStates = async searchText => {
const res = await fetch('../state.json');
const states = await res.json();
console.log(states);
}
search.addEventListener('input', () => searchStates(search.value));
так что я изменил путь к файлу
const res = await fetch('./state.json');
& амп; это дает мне массив обратно в результате.
Итак, проверьте свой путь & попробуй поменял. Это будет работать в моем случае. Я надеюсь, что это работает..
Ответ 8
Вы уверены, что не используете неправильный путь в поле url
? - Я столкнулся с той же ошибкой, и проблема была решена после того, как я проверил путь, нашел ошибку и заменил его на правильную.
Убедитесь, что указанный вами URL-адрес верен для запроса AJAX и что файл существует.
Ответ 9
Даже если ваш JSON в порядке, это может быть проблема с кодировкой DB (UTF8). Если ваша кодировка/сопоставление DB - 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
P.S. Устаревший, но все же может быть полезен для людей, которые застряли с "неожиданным характером".
Ответ 10
Может быть, это нерелевантный ответ, но его работа в моем случае... не знаю, что было не так на моем сервере... Я просто включил журнал ошибок на сервере Ubuntu 16.04.
//For PHP
error_reporting(E_ALL);
ini_set('display_errors', 1);
Ответ 11
Когда результат успешен, но вы получаете "& lt;" символ, это означает, что возвращается некоторая ошибка PHP.
Если вы хотите просмотреть все сообщения, вы можете получить результат в виде успешного ответа, получив следующее:
success: function(response){
var out = "";
for(var i = 0; i < response.length; i++) {
out += response[i];
}
alert(out) ;
},
Ответ 12
В некоторых случаях данные не были закодированы в формате JSON, поэтому вам необходимо сначала их кодировать, например,
json_encode($data);
Позже вы будете использовать json Parse в своем JS, например,
JSON.parse(data);