Подтвердить что ты не робот

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


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

4b9b3361

Ответ 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);