尝试编码时会中断 JSON 中断



我会尽量让这个问题提供信息,并尽可能直截了当。

我正在努力实现的目标

首先,我正在尝试使用PHP脚本将我的SQL表行编码为JSON,然后是一些JavaScript代码,该代码获取已编码的JSON并将其附加到我网站上的表中。

我的问题

我的 PHP 脚本工作得很好,它从数据库中获取数据,但它只有在我DESC应用于我的 SQL 时才有效。否则它会中断,我收到一个 JavaScript 错误:

Error talking to server SyntaxError: Unexpected end of JSON input
at parse (<anonymous>)
at Ut (VM1393 jquery.min.js:2)
at k (VM1393 jquery.min.js:2)
at XMLHttpRequest.<anonymous> (VM1393 jquery.min.js:2)

"与服务器通信时出错"是我在索引中编写的调试输出.html

我尝试过什么

尝试使用其他浏览器,Firefox 给出此错误:

"JSON.parse: unexpected character at line 1 column 1 of the JSON data"

JSON 编码器。

<?php
header('Content-Type: application/json');
include 'php/connectdb.php';
$sth = mysqli_query($conn, "SELECT column FROM table ORDER BY column ASC LIMIT 300;");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
$rows[] = $r;
}
echo json_encode($rows,JSON_PRETTY_PRINT);  
?>

索引中的相关 JavaScript 代码.html(排除表追加等)

function getFromMySql(command){
if (command===undefined) activity="";
return Promise.resolve($.getJSON("jsonencode.php",{
command: command,
}).done(function(data){
if (data===undefined) {
console.log("data undefined");
return false;
}
else if (data.hasOwnProperty('error')) {
console.log("error",data.error);
return false;
}
else {
// console.log(data);
}
return data;
}).fail(function(jqXHR, status, error) { 
if(status == 'parseerror'){
console.log('invalid json',error);
if (command=='saveactivity') displayError();
return false;
} else {
console.log('Error talking to server',error);
if (command=='saveactivity') displayError();
return false;
}
})
);
}

工作 JSON 示例(限制 2)

[
{
"id": "2959",
"alma": "991516634674702204",
"type": "Book",
"isbn": "0704339986",
"author": "Zoline, Pamela",
"title": "Busy about the tree of life",
"dscrptn": "",
"limg": "",
"simg": "",
"rating": null,
"categories": "Refinements|Women's Literary Fiction|Short Stories|English|Font Size (format_browse-bin)|Fiction Complete|Women Writers & Fiction|Fiction|Regular Size|Lesbian|Women's Popular Fiction|Contemporary Fiction",
"source": "bookmooch",
"recommended": "n"
},
{
"id": "10268",
"alma": "991516634674702204",
"type": "Book",
"isbn": "0704339986",
"author": "Zoline, Pamela",
"title": "Busy about the tree of life",
"dscrptn": "",
"limg": "http://images.paperbackswap.com/xl/89/9989/9780704339989.jpg",
"simg": "http://images.paperbackswap.com/m/89/9989/9780704339989.jpg",
"rating": "0",
"categories": null,
"source": "paperbackswap",
"recommended": null
}
]

我注意到了什么

目前我注意到这有效

SELECT column FROM table ORDER BY column DESC LIMIT 300;

虽然由于某种奇怪的原因这不起作用

SELECT column FROM table ORDER BY column ASC LIMIT 300;

进一步的调查告诉我,执行的SQL命令在.json文件中输出时工作得很好,但是在我的网站上没有输出。换句话说,我的编码器应该工作得很好。

echo "writing data into json file...n";
$fp = fopen('C:wamp64wwwscifiprosjektscifidb2.json', 'w');
fwrite($fp, json_encode($rows,JSON_PRETTY_PRINT));
fclose($fp);
echo "completed.n";

添加它是为了证明在我的网站上输出它有问题。

问题是由于未设置正确的字符集引起的。 字符集必须在我的 PHP 文件中定义,并且数据库表设置为

utf8_swedish_ci

utf8_general_ci

脚本似乎总是在第一个具有特殊字符(如 Æ、Ø、Å 等)的数组处崩溃,然后给了我上面在问题中给出的错误。

最新更新