2010-06-11 180 views
0

我有一個PHP API我正在使用它輸出所有內容爲JSON。處理來自AJAX請求的數據

我需要調用其中一個API方法並使用AJAX請求解析它。我正在使用jQuery(儘管它不應該)。

當我發出請求時,出錯的時候出現了「parsererror」,如textStatus和「Syntax Error:invalid label」。

簡化代碼:

$.ajax 
({ 
    type: "POST", 
    url: "http://mydomain.com/api/get/userlist/"+mid, 
    dataType: "json", 
    dataFilter: function(data, type) 
    { 
     /* Here we assume and pray */ 
     users = eval(data); 
     alert(users[1].id); 
    }, 
    success: function(data, textStatus, XMLHttpRequest) 
    { 
     alert(data.length); // Should be an array, yet is undefined. 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) 
    { 
     alert(textStatus); 
     alert(errorThrown); 
    }, 
    complete: function(XMLHttpRequest, textStatus) 
    { 
     alert("Done"); 
    } 
}); 

如果我離開關eval(data)然後一切工作正常。那麼,除data仍然未在success中定義。請注意,我正在使用PHP中的一組對象,然後通過json_encode將它們傳遞出去。這會有什麼不同嗎?

這方面還沒有取得任何進展。如果有人相信他們可以提供幫助,我願意拋出更多代碼。

這裏是東西

private function _get_user_colors($id) 
{ 
    $u = new User(); 
    $u->get_where(array('id' => $id)); 

    $bar = array(); 

    $bar['user'] = $u->stored; 

    foreach($user->colors as $color) 
    { 
     $bar['colors'][] = $color; 
    } 

    echo(json_encode($bar)); 
} 

我已經使用這個與其他基於PHP腳本問題PHP端。我不知道爲什麼Javascript會帶來問題。

+0

試試'users = eval('('+ data)+')';'? – Fluffy 2010-06-12 14:51:38

回答

1

ParseError通常表示來自服務器的響應格式錯誤。如果你直接在瀏覽器中加載它看起來不錯?

+0

是的,它看起來很好。所有的輸出都來自php的'json_encode'函數。 – 2010-06-11 22:08:21

1

嘗試在錯誤處理程序中輸出alert(request.responseText)(並將第一個參數重命名爲request)。這應該解決你的錯誤輸出你的腳本。

+0

它向我展示了我的迴應。沒有錯誤的輸出。但是,如果我放棄'eval(數據)',它會觸發'成功'。我應該怎樣解碼'JSON'? – 2010-06-11 22:10:31

+0

哦! jQuery的ajax()函數爲您處理解碼。如果您使用的是Chrome或Firefox + Firebug,請用console.log(data)替換eval(數據)行並檢查該對象 - 它應該將所有數據都視爲屬性。 – 2010-06-11 22:33:12

+0

@Rob:它似乎沒有識別出'console.log',如果我只是'提醒(數據)'它說'未定義'。 – 2010-06-12 14:03:54