SyntaxError:JSON.parse:JSON数据的第1行第1列的意外字符

时间:2014-09-09 11:54:04

标签: javascript php jquery ajax json

我花了6个多小时在我的代码中找到异常或特殊字符,但我无法做到。我在这里查看了所有类似的消息。

我发送带有大量弹出窗口的表单。首先,我使用内联弹出窗口打开表单,而不是将所有输入发送到main.js进行验证。

所以,我只需要第三只眼睛。

我得到了:index.htmlregister.phpmain.js

  

以下是代码

FORM

JS/AJAX

PHP-register.php

  

以下是错误消息

JSON输出 json

Chrome控制台:

chrome

Firefox控制台: firefox


我缺少什么?

14 个答案:

答案 0 :(得分:22)

为了寻求解决类似问题的搜索者的利益,如果输入为空字符串,则会出现类似的错误。

e.g。

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

或者如果您使用的是AngularJS

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

在Chrome中,它导致了“Uncaught SyntaxError:意外的输入结束”,但Firebug将其显示为“JSON.parse:JSON数据的第1行第1列意外的数据结束&#” 39;

当然,大多数人都不会被这个人抓住,但我没有保护这个方法,导致了这个错误。

答案 1 :(得分:19)

角色是<让我觉得你有一个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('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 :(得分:11)

删除

 dataType: 'json'

替换为

 dataType: 'text'

答案 3 :(得分:6)

我有完全相同的问题,我发现了一些东西。 我评论了这一行:

dataType:' json',

之后它成功但是...当我做console.log(数据)时它返回了主index.html。

这就是为什么你有"意外的令牌<"错误,它无法解析。

答案 4 :(得分:1)

将数据类型更改为文本有帮助 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}} 

答案 5 :(得分:1)

在AJAX调用上使用NodeJS发送JSON数据:

$.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");
            }

        });

});

答案 6 :(得分:1)

从json文件see attached link获取数据时遇到相同的错误

"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');

&结果使我得到阵列。 因此,请检查您的路径并尝试更改它。就我而言,它将起作用。我希望可以。

答案 7 :(得分:1)

JSON.parse()无法将该数据识别为字符串。例如{objAskGrant:"Yes",objPass:"asdfasdf",objNameSurname:"asdfasdf adfasdf",objEmail:"asdfaf@asdfaf.com",objGsm:3241234123,objAdres:"asdfasdf",objTerms:"CheckIsValid"}

这是这样的:JSON.parse({objAskGrant:"Yes",objPass:"asdfasdf",objNameSurname:"asdfasdf adfasdf",objEmail:"asdfaf@asdfaf.com",objGsm:3241234123,objAdres:"asdfasdf",objTerms:"CheckIsValid"});将输出SyntaxError:在行上缺少“'”而不是“ {” ...

因此请正确包装所有数据,例如:'{"objAskGrant":"Yes","objPass":"asdfasdf","objNameSurname":"asdfasdf adfasdf","objEmail":"asdfaf@asdfaf.com","objGsm":3241234123,"objAdres":"asdfasdf","objTerms":"CheckIsValid"}'对我来说非常好。

不是这样的:"{"objAskGrant":"Yes","objPass":"asdfasdf","objNameSurname":"asdfasdf adfasdf","objEmail":"asdfaf@asdfaf.com","objGsm":3241234123,"objAdres":"asdfasdf","objTerms":"CheckIsValid"}"会给出您遇到的当前错误。

答案 8 :(得分:0)

您确定在url字段中没有使用错误的路径吗? - 我遇到了同样的错误,检查完路径后问题解决了,发现错了,用正确的替换了。

确保您指定的URL对于AJAX请求是正确的,并且该文件存在。

答案 9 :(得分:0)

即使您的JSON没问题,也可能是DB charset(UTF8)问题。如果您的数据库的字符集/校对是UTF8但是PDO没有正确设置(缺少字符集/解决方法),数据库中的某些à/è/ò/ì/等可能会破坏您的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 :(得分:0)

可能是它不相关的答案,但它在我的情况下工作......不知道我的服务器上有什么问题......我只是在Ubuntu 16.04服务器上启用了错误日志。

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

答案 11 :(得分:0)

当结果成功但你得到&#34;&lt;&#34;字符,这意味着返回了一些PHP错误。

如果您想查看所有消息,可以通过以下方式获得成功响应结果:

success: function(response){
     var out = "";
     for(var i = 0; i < response.length; i++) {
        out += response[i];
     }
     alert(out) ;
},

答案 12 :(得分:0)

在某些情况下,数据未编码为JSON格式,因此您需要先对其进行编码,例如

 json_encode($data);

稍后您将在JS中使用json Parse,例如

JSON.parse(data);

答案 13 :(得分:0)

尝试使用 MYSQLI_ASSOC 代替MYSQL_ASSOC ...通常,通过更改该问题即可解决

祝你好运!