2012-07-19 39 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文件开始时的系统(不可见)符号。

相关问题