作者pttnews (PTT新闻)
看板Ajax
标题[问题] JSON Parse Error
时间Tue Jun 4 16:24:01 2013
我用Firefox + Firebug 除错
当我呼叫address.jsp, 它会回传
[{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}]
可是Firebug 的控制台会回传错误
语法错误 error source line:
[{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}]
jquery-1.7.2.js(第 7746 行、1 列)
错误发生点在alert aa 与 alert bb 之间,
程式码如下
alert('aa');
$.ajax({
url: "XXXX/js/address.jsp",
data: { area:addCtrl.value , Type:"Query"},
dataType: 'text',
async: false,
error: function(xhr) {
alert("无法取得代码档!!");
},
success: function(response) {
alert('bb');
var json = JSON.parse(response.replace(/(\r\n|\n|\r)/gm,""));
alert('cc');
});
这问题搞了快一天了,json 语法本身并没错,中括弧去掉,我也试过了
虽然不影响後续程式,但是想请问各位先进,
是哪里做错呢?为什麽FireBug会一直报错?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.63.96.2
1F:→ lyforever:JSON.stringify(response), 不过你确定你回传的是json? 06/04 17:42
确定是json
[{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}]
您的方法我刚刚试过,还是不行,
PS:在IE8是正常的,FF就是不行
※ 编辑: pttnews 来自: 210.63.96.2 (06/04 18:07)
2F:推 s25g5d4:先trim在parse 06/04 18:30
3F:→ lyforever:我其实想问 你dataType为什麽要设text.... 06/04 18:35
6F:→ lyforever:The type of data that you're expecting back from the 06/04 18:35
7F:→ lyforever:server 06/04 18:36
dataType 设为 json 这个方法,很惭愧,我不熟悉,
我一直都是 $.parseJSON(response) , JSON.parse(response)是初次使用
不过这两种方法都试过。
我觉得问题不是出在
var json = JSON.parse(response.replace(/(\r\n|\n|\r)/gm,""));
因为alert('bb')之前,FF就报出错误讯息了
alert('bb');
var json = JSON.parse(response.replace(/(\r\n|\n|\r)/gm,""));
alert('cc');
此外有热心大大来信,要我测试
alert(
JSON.parse(
'[{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}]'
)
);
这一行执行正确无误
※ 编辑: pttnews 来自: 210.63.96.2 (06/04 19:17)
8F:推 No:你的code跟这里贴的一模一样吗? success 少了大括号 } 喔 06/04 19:30
9F:推 s25g5d4:trim不是这样用的 你可以直接response.trim() 06/04 19:32
10F:→ s25g5d4:不然就console.log(response)看他到底送甚麽东西过来 06/04 19:33
yes sir!
console.log("("+response+")");
出现
(
[{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}]
)
console.log("("+response.replace(/(\r\n|\n|\r)/gm,"")+")");
出现
([{"areaname":"台中市大里区","areacode":"6602800000","zipcode":"412"}])
谢谢您
※ 编辑: pttnews 来自: 210.63.96.2 (06/05 09:57)
因为 lyforever大大,提到dataType为什麽要设text.
所以我换成以下两种方法测试,也是不行,报同样错误。
$.getJSON(
"XXXX/js/address.jsp",
{ area:addCtrl.value , Type:"Query"},
function(response){
alert(response);
}
);
$.ajax({
url: "XXXX/js/address.jsp",
data: { area:addCtrl.value , Type:"Query"},
dataType: 'json',
async: false,
error: function(xhr) {
alert("无法取得代码档!!");
},
success: function(json) {
alert(response);
}
});
※ 编辑: pttnews 来自: 210.63.96.2 (06/05 10:47)
11F:→ buganini:把中文去掉呢? 另外多余的换行应该是在server side就 06/05 16:35
12F:→ buganini:处理好不是传回来再取代吧… 06/05 16:35