[英]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data?
[英]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
我花了 6 个多小时在我的代码中找到异常或特殊字符,但我找不到。 我检查了这里的所有类似消息。
我正在发送带有华丽弹出窗口的表格。 首先,我使用内联弹出窗口打开我的表单,然后将所有输入发送到 main.js 进行验证。
所以,我只需要第三只眼。
我有: index.html
, register.php
, main.js
这是代码
这是错误消息
JSON Output
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.