2017-01-29 50 views
-2

我有一個JSON是getJSON版PHP腳本,以更新一個簡單的CMS數據庫:爲什麼PHP認爲這個JSON有語法錯誤?

{ 
    "pid": "3", 
    "post": "<p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p><br><p>&nbsp;</p><br><p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p>", 
    "tagline": "", 
    "title": "About" 
} 

在PHP中它被解碼與json_decode然後被紅牌罰下到數據庫。

它工作的很好,JSONLint報告JSON有效,但是PHP的json_decode失敗,錯誤4,這是'語法錯誤'。我不確定哪個是正確的(我從我發送的GET請求複製了上面的JSON,所以在JS方面應該是有效的)。

我使用JSON.stringify來創建從JS陣列我的陣列的JSON。數組如下:

var arr = { 
    pid : "<?php echo $pId; ?>", 
    post : $("#edit_target_preview").html(), 
    tagline : document.getElementById('page_tagline').value, 
    title : document.getElementById('page_title').value, 
}; 

該陣列通過getJSON轉發到PHP腳本:

$.getJSON("savepost.php?json=" + JSON.stringify(arr), function(data){ 
    *stuff happens here* 
}); 

我在做什麼錯在這裏?我是否會反思這一點,或者完全使用錯誤的方法?

進制打印:

7b22706964223a2233222c22706f7374223a223c703e3c7370616e207374 796c653d5c2274657874 2d6465636f726174696f 6e3a20756e6465726c69 6e653b5c223e3c737472 6f6e673e546573743c2f 7374726f6e673e3c2f73 70616e3e3c2f703e3c62 723e3c703e626c61683c 2f703e3c62723e3c703e

+0

使用瀏覽器的控制檯,網絡標籤:請分享「savepost.php」請求的響應/預覽。有時候,空格或php腳本中的錯誤會中斷json字符串。 –

+1

替換你之後JSON字符串變成:''{
「pid」:「3」,
...'這是無效的JSON。 –

+0

有什麼問題,但你確實似乎在過度使用它。顯示行爲。捕獲實際的GET信息並將其硬編碼到一個變量中。然後json_decode它,顯示錯誤。然後發佈在這裏! 9個10說你會找到bug,否則我們可以幫助你調試:) – Nanne

回答

4

你缺少encodeURIComponent調用(或使用一個體面的序列化程序),當你撰寫你的網址。由於您的JSON包含&,因此服務器上的解碼將截斷您的數據。如果您在json_decode之前記錄了數據,那就很明顯了。

請注意,在GET請求(由於長度限制)中將URL傳遞給您的JSON可能不是一個好主意。我強烈建議使用POST請求,這也會使語義更有意義。

1

由於您使用它的getJSON:從服務器

加載JSON編碼的數據使用GET HTTP請求。

&nbsp;導致錯誤,JSON之前它在<p>結束,因爲你正在做一個GET請求,並&標記以前的參數和其他參數的開始的結束......

只需使用後,而不是它應該工作:

$.post("savepost.php", {json : JSON.stringify(arr)}, function(data) { 
    // Do something here 
}, 'json');