2012-06-29 50 views
0

我對PHP開發比較陌生,但對一般的Web開發並不陌生。PHP包含文件正在使JSON數據無效

我有以下PHP文件:

<?php 
class dialogResult{ 

    var $Message; 
    var $Title; 
    var $Height; 
    var $GenericData; 

    function __construct(){ 
     $this->Height = 10; 
    } 
} 

    header("Cache-Control: no-cache", true); 
    header("Content-type: application/json; charset=utf-8", true); 
    $dr = new dialogResult(); 
    $dr->Message = "A Test Message encoded"; 
    $dr->Height = 10; 
    $dr->GenericData = "Empty"; 
    $dr->Title = "My Message"; 
    echo(json_encode($dr)); 
?> 

這將返回JSON數據不如預期,但是如果我的類移動到一個單獨的文件,並添加包括include_once,要求或require_once返回無效JSON數據。誰能告訴我爲什麼會這樣?

它不一定只是移動這個類,如果我有任何包含的文件,它使數據無效。

感謝,

基思

這裏是包括類,我也試圖消除?>

<?php 

class dialogResult{ 

    var $Message; 
    var $Title; 
    var $Height; 
    var $GenericData; 

    function __construct(){ 
     $this->Height = 10; 
    } 
} 

有沒有領先或任何尾隨空格。下面是返回的「無效」 JSON:這給了我一個「意外的標記」如果我嘗試使用JSONLint解析它

{"Message":"A Test Message encoded","Title":"My Message","Height":10,"GenericData":"Empty"} 

。 當然,如果我手動輸入到JSONLint,那就沒問題。我想有一些角色我無法識別/看到在JSON中顯示,但我不知道如何找到它。

+0

你是否在這些包含的文件中回顯/打印屏幕上的任何內容? – 2012-06-29 12:10:28

+0

echo時輸出什麼? – Dev

+0

你是如何獲取JSON數據的? – 2012-06-29 12:35:34

回答

3

即使Martin和navnav的評論都是正確的,但是空白區通常不會像JSON格式那樣使用二進制格式(例如GIF,JPEG等)無效。

因此,您的問題可能是一個2/3字節的標頭,許多編輯器在文件的開頭沒有顯示,或者更糟糕的是,添加。

編輯

一種可能的方法來消除BOM是使用和IDE一樣phpstorm,具有二進制安全編輯器,能夠檢測和刪除BOM。

+0

我下載了phpstorm並編輯了具有相同結果的文件。如果我有任何包含文件(不只是具有dialogresult類的文件),我會得到無效的json。如果我在包含NO的文件中包含dialogresult類,那麼它工作得很好。 –

+0

嗨,請確認:您是否在文件菜單下選擇了「刪除BOM」? –

+0

這最終成爲問題。感謝您的幫助,我實際上已經完成了獲取數據的不同方法,但我討厭定製寫入庫存功能。 –

0

這可能是因爲您在包含的文件中回顯/打印屏幕上的內容。

JSON不適合其他內容。

也是你的?>標籤 - 標籤之後是否有任何換行符/空格?如果是這樣,那就是你的問題。刪除它們。事實上,如果該文件只會支持PHP代碼,請完全刪除?>標籤,因爲它不是必需的。

0

如果在[?php和後面?]之前有空白字符,請檢查您的班級。這會觸發給瀏覽器的內容,並會創建一個HTTP Header無法創建的警告,這會給JSON帶來不好的結果。

檢查你的腳本 - 你也包括這個 - 也。

對於許多Web開發人員來說,對於這個確切原因,它已經成爲某種「最佳實踐」。

無效數據的外觀如何?