簡體   English   中英

語法錯誤:JSON.parse:JSON 數據的第 1 行第 1 列出現意外字符

[英]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

我花了 6 個多小時在我的代碼中找到異常或特殊字符,但我找不到。 我檢查了這里的所有類似消息。

我正在發送帶有華麗彈出窗口的表格。 首先,我使用內聯彈出窗口打開我的表單,然后將所有輸入發送到 main.js 進行驗證。

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

我有: index.htmlregister.phpmain.js

這是代碼

形式

JS/阿賈克斯

PHP-register.php

這是錯誤消息

JSON OutputJSON

Chrome 控制台:

鉻合金

Firefox 控制台:火狐瀏覽器


我錯過了什么?

為了尋求解決類似問題的搜索者的利益,如果您的輸入是空字符串,您可能會收到類似的錯誤。

例如

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

或者如果您使用的是 AngularJS

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

在 chrome 中,它導致“Uncaught SyntaxError: Unexpected end of input”,但 Firebug 將其顯示為“JSON.parse:JSON 數據的第 1 行第 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編輯:

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

消除

 dataType: 'json'

將其替換為

 dataType: 'text'

我有完全相同的問題,我找到了一些東西。 我已經評論了這一行:

數據類型:'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}} 

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

        });

});

即使您的 JSON 沒問題,也可能是 DB 字符集 (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

PS 過時了,但仍然可以幫助那些被“意外角色”困住的人。

我在從 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');

& 結果它給了我數組。 因此,請檢查您的路徑並嘗試更改它。 它適用於我的情況。 我希望那有效..

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: missing " ' " 而不是 "{" 在線...

所以正確包裝所有數據,如下所示: '{"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"}"這給出了您遇到的當前錯誤。

您確定您沒有在url字段中使用錯誤的路徑嗎? - 我遇到了同樣的錯誤,經過我檢查路徑,發現錯誤並替換為正確的路徑后問題解決了。

確保您為 AJAX 請求指定的 URL 正確並且文件存在。

可能是它不相關的答案,但它在我的情況下工作......不知道我的服務器出了什么問題......我只是在 Ubuntu 16.04 服務器上啟用錯誤日志。

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

當結果成功但你得到“<”字符時,這意味着返回了一些 PHP 錯誤。

如果您想查看所有消息,您可以通過以下方式獲得作為成功響應的結果:

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

在某些情況下,數據未編碼為 JSON 格式,因此您需要先對其進行編碼,例如

 json_encode($data);

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

JSON.parse(data);

嘗試使用MYSQLI_ASSOC而不是 MYSQL_ASSOC ......通常問題解決了改變

祝你好運!

我在帶有分頁的應用程序中的 AJAX 調用中遇到了相同的錯誤,或者在任何情況下都帶有 URL 中的查詢字符串

因為 AJAX 被發布到類似的東西

var url = window.location.href + 'search.php';
...
...
fetch(url, {
        method: 'POST', 
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({search: text}),
      })

一旦在瀏覽器 URL 中添加了一些查詢字符串,就會彈出錯誤“JSON.parse:第 1 行第 1 列的意外字符”

解決方案是簡單地從任何查詢字符串中清除 URL

var url = window.location.href.split('?')[0] + 'search.php';

問題得到解決

因此,錯誤不是 Json 的格式,而是 POST 的錯誤 URL

@Prahlad 在這里有所作為。 我已經看到這個東西很多年了,它只是成為我的背景噪音。

最近我在做一些全新的東西,我意識到我在 Mac (12.2.1 (21D62)) 上的控制台 (FF 98.0 (64-bit)) 中看到了這一點,其中 html 由本地 NGNIX 安裝 (nginx) 提供服務/1.21.6)

這是正在服務的 html 的全部內容:

<!doctype html>
<html lang="en">
<head>
</head>
<body>
   Some text
</body>
</html>

現在......我不知道為什么會這樣,但我很確定這不是代碼:-)

我收到類似的錯誤: SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data"

事實證明我已經從后端以 JSON 格式發送數據,所以當它到達前端時,我根本不應該使用JSON.parse

$.ajax({
    type: "get",
    url: 'https://localhost:8080/?id='+id,
    success: function (response) { // <- response is already JSON
        var data = $.parseJSON(response); // <- I removed this line
        modalShow(data); // <- modalShow(response) now works!
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM