2012-08-02 29 views
0

我必須將系統從一臺服務器移到另一臺服務器,並且在嘗試訪問此頁面時遇到錯誤。該代碼與現場工作系統完全相同,但由於某種原因現在不起作用。JSON解析錯誤(沒有JSON的經驗)

var loadData = function(data) { 
if(data) 
    data += '&offset=' + offset; 
else 
    data = 'offset=' + offset; 

var callback = { 
    success: function(o) { 
     try { 
      var data = YAHOO.lang.JSON.parse(o.responseText); 
     } catch(e) { alert('e: ' + e + '\no: ' + o + '\ndata: ' + data + '\noffset: ' + offset + '\n Response Text:' + o.responseText); } 

     // removed a lot of pointless code (no error here) 
} 

YAHOO.util.Connect.asyncRequest('POST', 'json/dmrlist.php', callback, data); 
} 

這是從警報打印出:該拉起錯誤

JS代碼

enter image description here

這是PHP代碼(的開始),它是「調用「,但是在屏幕截圖中看到了一個錯誤。

line 6: $JSON = json_decode($_POST['JSON']); 

line 8: if($JSON->Depot) 
line 9:  $filter = " AND `Site` = '" . $JSON->Depot . "'"; 

基本上,$ JSON是不確定的,這意味着什麼張貼,但它看起來像的JavaScript,就是要發佈的信息呢?

我很困惑,我沒有使用JSON或JavaScript的經驗,也不知道爲什麼這不起作用。

+0

發佈文字..否則,我們可以猜測整天什麼錯誤。 – 2012-08-02 13:47:52

+0

這就是我不明白,這不是我的系統,它試圖得到$ _POST ['json'],我不知道這些數據是從哪裏來的。對不起,沒有這方面的經驗 – Andy 2012-08-02 13:48:54

+1

看起來像你有一個PHP錯誤,這導致'o.responseText'包含錯誤消息而不是JSON,這反過來導致JSON解析器錯誤。 – 2012-08-02 13:49:21

回答

1

數據變量將被髮送到服務器,但可能只是鍵/值對。您可以嘗試傾倒出來,如:

if (isset($_POST['JSON'])) { 
    print_r($_POST['JSON']); 
} 
if (isset($_POST['Depot']) { 
    print_r($_POST['JSON']); 
} 

或者只是 的print_r($ _ POST);

我懷疑沒有設置$ _POST ['JSON'],並且您可能不需要將其他值解碼爲JSON,因爲它們可能只是可以直接從$ _POST數組中讀取的鍵/值對,但我不熟悉YUI的ajax函數,所以我可能是錯的 - 檢查服務器上的值。

P.S.以這種方式使用print_r會導致無效返回(它不會是JSON),但是您可以在Firebug等中查看它並查看值。

+0

我會在哪裏放置這段代碼?我不能把它放在dmrlist.php上,因爲它不會被髮布,只能被YUI AJAX函數訪問 – Andy 2012-08-02 14:02:36

+0

你應該把它放在dmrlist中。PHP(暫時)或創建一個副本並使用它(只需更改客戶端代碼以指向它)。你還應該能夠看到類似Firebug,Fiddler等的請求變量,並檢查是否有名爲JSON的參數,以及它是否是json格式。從你的代碼發佈,我懷疑沒有這樣的變量,或者它是空的。 – Robert 2012-08-02 14:05:19

+0

我認爲它也是空的,唯一的問題是我不知道應該填充什麼,或者將數據「發佈」到頁面以獲取。在整個代碼庫中引用dmrlist.php的唯一地方是上面顯示的YUI AJAX函數,所以我認爲必須以某種方式發送數據(或不在這種情況下) – Andy 2012-08-02 14:06:57

0

問題是舊服務器使用的是舊版本的php,因此似乎並不需要「ifsets」(我不知道爲什麼),但我只是在處理JSON的代碼之前放置了if(isset($_POST['JSON'])){ ,現在它的工作。我假設第一個循環沒有發佈任何東西,所以沒有東西可以接收,但是ifset讓php跳過JSON代碼並從db獲得第一個選擇,然後可以循環回去,這次實際設置爲$_POST['JSON']

TL; DR:老版本的PHP,只需要放在一個ifset,並宣佈你正在試圖用json_decode解碼可變