![](/img/trans.png)
[英]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data?
[英]SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
好的,所以我正在嘗試從一個包含幾個 LED 等狀態的 json 文件中提取數據。我有一個每秒運行幾次的腳本,它會提取數據並讓網頁加載它。 問題是,服務器讀取 json 文件大約 20 次后,最終會拋出這個錯誤。
SyntaxError: JSON.parse: JSON 數據的第 1 行第 1 列的數據意外結束
// For toggling the LED/switch status indicators using the json data
$(document).ready(function() {
(function worker() {
$.ajax({
url: 'server_info.json',
success: function(data) {
var json = $.parseJSON(data);
console.log(json);
if (json.led_1 == "off") {
// do stuff
}
if (json.led_2 == "off") {
// do stuff
}
if (json.led_3 == "off") {
// do stuff
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 250);
}
});
})();
});
json 文件如下所示:
{ "led_1": "on", "led_2": "on", "led_3": "on" }
在我看來,json 數據的格式總是正確的。 我不明白錯誤來自哪里。 有任何想法嗎?
使用 Firefox 調試,當我收到該錯誤時,我能夠看到返回的值類型是未定義的。 首先檢查要解析的值是否為空/未定義,然后如果條件為假,則繼續解析,否則處理條件解決了我的問題。
使用“dataType”設置來識別響應的類型,這樣 .ajax() 調用就知道它的 JSON 並且不需要猜測。
這可能無法解決問題,因為您的響應可能沒有為引發錯誤的調用返回 JSON。 如果添加錯誤設置,您可以看到服務器在錯誤時返回的內容,但如果請求完成,請檢查控制台以了解從服務器返回的內容。 正如我所說,如果您從 $.parseJSON() 開始收到該錯誤,它可能不是 JSON。
$(document).ready(function() {
(function worker() {
$.ajax({
url: 'server_info.json',
dataType: 'json',
success: function(data) {
console.log(data);
if (data.led_1 == "off") {
// do stuff
}
if (data.led_2 == "off") {
// do stuff
}
if (data.led_3 == "off") {
// do stuff
}
},
error: function( data, status, error ) {
console.log(data);
console.log(status);
console.log(error);
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 250);
}
});
})();
});
事實證明,該錯誤與 JSON 無關。 這實際上是因為后端返回非 JSON 或空字符串。
// Update
if(updateFile($id,$author)) {
echo json_encode(
array('message' => 'Post Updated')
);
} else {
echo json_encode(
array('message' => 'Post Not Updated')
);
}
至於我,這行得通。 祝你好運
肯定有更多的理由:
未捕獲的 SyntaxError:JSON.parse:JSON 數據的第 1 行第 1 列的數據意外結束
即使原因最終可能沒有您的用例,該列表也應該為出現此錯誤的人提供一些提示。
接受使用 FireFox 調試的贊成答案,這里有一個如何使用調試器的示例( Ctrl+Shift+C
或F12
--> 調試器)。 我有相同的錯誤消息,但代碼不同。
您需要檢查復選框“暫停異常”(我還檢查了“暫停捕獲異常”,我不知道是否需要)和
觸發您要測試的內容。
SyntaxError: JSON.parse: JSON 數據的第 1 行第 1 列的數據意外結束
當代碼到達時拋出
if (JSON.parse(resp) > 0){
resp
是一個空字符串(因為它是空的,所以無法解析)。在上面的行前面添加:
if (resp != ""){...
似乎可以修復它,它運行沒有錯誤,但這不是解決方案,因為它只是跳過了這一步,但更新將不再完成。 我改回沒有if (resp != ""){
的代碼。
您可以使用echo($sql);
在網絡選項卡的響應中打印 SQL:
ajax 后端顯示了響應為空的原因:傳遞了一個空值,導致類似 SQL
update my_table set where x = 123
雖然應該是
update my_table set my_var = 1 where x = 123
我通過更改 javascript (js) 中的變量解決了這個問題
從
var my_var1 = row["my_var1"];
至
var my_var1 = row["my_var1"] ?? '';
並在 php
從
$raw_my_var1 = $_REQUEST['my_var1'] ;
$my_var1 = $raw_my_var1 != NULL ? $raw_my_var1 : '' ;
或在一行中:
$my_var1 = isset($_REQUEST['my_var1']) ? $_REQUEST['my_var1'] : '';
使空值成為空字符串。
此外,您還應該檢查(!):
empty($my_var1)
因為一個空變量(如果你想寫一個空字符串""
到 SQL 中的一個字段)仍然有isset($my_var1)
= 1!
這些檢查很可能是撰寫本文時得票最多的答案的意思。
這只是解決方案的一步。 它有助於通過一個循環步驟,其中前端的某些字段未填充。
您在問題中沒有使用 SQL,這只是為了提醒大家權限。
當您在后端使用 SQL 並且您的用戶沒有讀/寫權限/權限來選擇、插入、更新、刪除或在 sql 后端的代碼中使用的任何內容時,您會收到相關錯誤也是。
如果要更新,這還不夠:
更新將不起作用,並且響應可能變為空。 看看你的后端代碼。
當數據類型變為 SQL 中的數值字符串時,也可能會引發有問題的錯誤,盡管所需的值是數值。
這至少是我一開始的想法,事實證明 SQL 可以將'1'
讀取為整數1
而它不能將'1.00'
讀取為十進制1.00
。 這就是為什么它只在前端字段中用1
覆蓋1.00
時起作用。
真正的原因在於后端的 SQL。
為了將傳遞的值保留為小數或整數,我只是刪除了后端 SQL 代碼中(錯誤地)添加的引號。
$sql = $sql . "my_var_numeric='" . $value_numeric . "'";
至
$sql = $sql . "my_var_numeric=" . $value_numeric ;
這樣后端的字段數據類型decimal(12,2)就被傳遞了。
在我的測試中,我沒有更改這個1.00
字段,而只更改了兩個文本字段,因此令人驚訝的是,另一個我從未更改過的字段會成為問題。
為了調試,我在 ajax php 后端添加了一些echo($sql)
,它們是在 sql 查詢的預期 echo($result) = 1 之前添加的。
再次評論 echo 命令也刪除了有問題的錯誤。
在另一種情況下,計划外的回聲也將錯誤消息稍微更改為
未捕獲的語法錯誤:JSON.parse:JSON 數據的第 1 行第 3 列的數據意外結束
(第 3 列而不是第 1 列)
我還檢查了一個變量是否為空,盡管該變量不存在,但在我的情況下它有一個不需要的前綴,例如:
if ($not_existing_prefix_var1 != '' || $var2){
[... run sql]
這也引發了有問題的錯誤。
我只需要將代碼更改為
if ($var1 != '' || $var2){
[... run sql]
我得到了錯誤
未捕獲的語法錯誤:JSON.parse:JSON 數據的第 1 行第 3 列的數據意外結束
(現在是第 3 列而不是第 1 列)
當我嘗試在不允許使用 NULL 時使用 NULL 值更新 SQL 中的字段時。
在您的情況下,可能是在后端文件中,僅在少數情況下,“on”和“off”字段是一個整數,拼寫錯誤,如“offf”,其中包含禁止的特殊字符,或者更有可能的是,為空/未填充/未定義。 具有其他未定義值或格式不正確的項目。 或者數據中有一個十進制數據類型,其中一個整數在源中。 等等。 或者你有尾隨逗號或前導零。 SyntaxError: JSON.parse: bad parsing中存在大量此類數據類型錯誤。 該鏈接是您的錯誤的官方幫助,顯示在瀏覽器的調試器中。
后端文件中的某些項目也可能存在錯誤的語法,如果您僅在讀取工作時返回響應,則可能會返回空響應。 但這取決於您的代碼,因為 json 中的語法錯誤會使文件不可讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.