2012-07-19 95 views
0

我試圖調試以下jQuery.ajax()調用:jQuery.ajax()調用返回JSON.parse意外字符錯誤

var rollnum = $('#rollNum').val() 
$.ajax({ 
url: sURL + "myController/myMethod", 
type: "POST", 
data: {rollnum: rollnum}, 
dataType: 'json', 
success: function(json){alert(json)}, 
error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError);} 
}); 

這裏是方法:

function myMethod(){ 
$query = $this->db->query("SELECT tblontario.Address, tblontario.Municipality FROM tblontario WHERE RollNum = 211010002528200"); 
$json_address = array(); 
$json_municipality = array(); 
foreach ($query->result_array() as $row){ 
    $json_address[]  = $row['Address']; 
    $json_municipality[] = $row['Municipality']; 
} 
$json['address'] = $json_address; 
$json['municipality'] = $json_municipality; 
echo json_encode($json); 
exit; 
    } 

目前發生的情況是我收到了一個錯誤。錯誤是由這些細節:

xhr.status: 200; and 
thrownError: SyntaxError: JSON.parse: unexpected character 

當我看XHR響應選項卡中螢火它表明:

Reload the page to get source for: http://www.mysite.ca/myController/myMethod 

東西似乎是正常工作,因爲我們得到的200 xhr.status ,但我似乎無法從此調用中檢索返回的json數據。任何人都可以給我一個什麼問題的建議?謝謝。

+0

實際迴應是...? – 2012-07-19 05:23:03

回答

1

服務器使用代碼200而不是其中一個重定向代碼返回重定向頁面。 AJAX調用不會重定向,因爲狀態碼是200,並且它不能解碼響應,因爲它不是JSON。

要麼使服務器返回正確的狀態碼,要麼以純文本的形式請求頁面,以便在解碼之前檢查它並查找重定向消息。

+0

感謝您指點我正確的方向。問題在於該頁面要求用戶登錄,在測試期間情況並非如此。我可以通過查看Firebug的NET-> XHR選項卡並查看POST標題響應來進行調試。謝謝你的幫助。 – DanielAttard 2012-07-19 06:37:50

3

將內容的標題設置爲json的類型... 以下是設置標題類型的示例。

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

在jQuery 1.4以上版本中,JSON數據以嚴格的方式被解析。

任何格式不正確的JSON都會被拒絕並引發解析錯誤。

+1

只想說我有類似的問題,但是Content-type被設置爲application/json,所以這不是唯一可能出錯的東西。希望我知道我在做什麼。 – 2rs2ts 2013-09-13 14:39:49

0

在文本編輯器中關閉BOM(編碼UTF-8,不包含BOM)。 BOM是UTF8文件開始時的系統(不可見)符號。