2010-02-01 49 views
1

我试过从jQuery 1.2.6升级到1.4.1。 JSON查询现在失败,并显示错误:“parseerror,invalid label”升级到jquery 1.4.1&现在得到解析错误

我简化了代码,使其达到最小值。 PHP程序的

var jsonUrl = "process_01.php"; 
$.ajax({ 
type: "POST", 
url: jsonUrl, 
data: "var=myVar",   
dataType: "json",  
beforeSend: function(msg) { 
}, 
success: function(msg) { 
}, 
error: function (msg, textStatus, errorThrown) { 
    alert("an error has occured (" + textStatus + " " + errorThrown +")"); 
    } 
}); 
return false; 
} 

输出为 { “foo” 的: “酒吧”, “IsTrue运算”: “真正的”}

我可以在Firebug看到这个

+1

你确定你的返回的JSON是合法的吗?像,没有流浪的逗号或任何东西? – Pointy 2010-02-01 21:04:10

+0

嗯,实际上萤火虫不认为它是JSON(缺少额外的JSON标签)。其实旧版本也不被识别为JSON! 但它通过JSLint。顺便说一句,它在IE和Mozilla都失败。 – 2010-02-01 21:08:43

+0

JQuery在1.4版本中解析器得到了更严格的要求(请参阅http://yehudakatz.com/2010/01/15/jquery-1-4-and-malformed-json/)。不过,您的JSON对我来说看起来还不错。 – 2010-02-02 21:45:09

回答

0

确保您的内容类型设置为application/json。

也看看this,看起来类似于你的问题。

+1

它看起来像我的PHP脚本在标题之前抛出一个空行。 – 2010-02-01 22:10:49

0

应该有单引号括起来发送的值。像this guy一样。

+0

但他已经用他的价值 – 2010-02-01 21:14:27

+0

引用了单双引号。同样的结果...我发现奇怪的是,萤火虫不认识这个JSON ... $ returnArray = $ arr = array(“foo”=>“bar”,“isTrue”=>“true”); echo json_encode($ returnArray); 其他人可以试试吗? – 2010-02-01 21:19:11

+1

我发现http://dev.jqueryui.com/ticket/5104这似乎说json_encode是不够“有效”。相反,他们实现了一个自定义函数'array_to_json',见http://dev.jqueryui.com/browser/trunk/demos/autocomplete/search.php?rev=3749#L636。我仍然无法弄清楚究竟是什么使它无效。 – 2010-02-02 21:07:40

0

如果它能帮助其他任何人发现这个问题,那么原始海报表示他并没有将应用程序/ json发送出去。在我来说,我遇到了麻烦解析双引号字符串中引用的撇号这样的:

{"description": "An invalid person\'s JSON"}

貌似1.3.2了这一点,但1.4.1拒绝。猜猜我必须找到一个更优雅的方法来逃避服务器端。请参阅http://jsbin.com/oveci3以供参考。

相关问题