JQuery getJSON – ajax parseerror
我试图用JQuery getJSON和ajax解析以下json响应:
[{"iId":"1","heading":"Management Services","body":"Program Overview
January 29, 2009
"}]
我也尝试过像这样转义“/”字符:
[{"iId":"1","heading":"Management Services","body":"Program Overview January 29, 2009"}]
当我使用getJSON时,它不会执行回调。 所以,我用JQuery ajax尝试了如下:
$.ajax({ url: jURL, contentType: "application/json; charset=utf-8", dataType: "json", beforeSend: function(x) { if(x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, success: function(data){ wId = data.iId; $("#txtHeading").val(data.heading); $("#txtBody").val(data.body); $("#add").slideUp("slow"); $("#edit").slideDown("slow"); },//success error: function (XMLHttpRequest, textStatus, errorThrown) { alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown); } });
ajax命中错误并警告以下内容:
XMLHttpRequest=[{"iId":"1","heading":"Management Services","body":"Program Overview
January 29, 2009
"}] textStatus=parseerror errorThrown=undefined
然后我尝试了一个简单的JQuery get调用,使用以下代码返回JSON:
$.get(jURL,function(data){ var json = eval("("+data+");"); wId = json.iId; $("#txtHeading").val(json.heading); $("#txtBody").val(json.body); $("#add").slideUp("slow"); $("#edit").slideDown("slow"); })
.get返回JSON,但无论我如何修改JSON(内容类型标题,格式的其他变体等),eval都会出现错误。
我想到的是,在JSON中返回HTML并解析它似乎存在问题。 但是,我希望我可能错过了一些允许我通过JSON获取此数据的内容。 有没有人有任何想法?
您拥有的JSON字符串是一个内部有1个对象的数组,因此要访问该对象,您必须首先访问该数组。 使用如下所示的json.php:
[ { "iId": "1", "heading": "Management Services", "body": "Program Overview
January 29, 2009
" } ]
我试过这个
$.getJSON("json.php", function(json) { alert(json[0].body); // Program Overview
January 29, 2009
alert(json[0].heading); // "Management Services" alert(json[0].iId); // "1" });
我也试过这个:
$.get("json.php", function(data){ json = eval(data); alert(json[0].body); // Program Overview
January 29, 2009
alert(json[0].heading); // "Management Services" alert(json[0].iId); // "1" });
他们都对我很好。
如果有人仍然遇到这个问题,那是因为你的响应需要是一个JSON字符串和内容类型“application / json”。
asp.net(c#)中的HTTP示例:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; context.Response.Write("{ status: 'success' }"); }
心连心,
马蒂
您是否尝试过对HTML进行XML编码(即< H1>)?
您可以将其作为文本返回,然后使用json.org解析器进行解析
看它是否有所不同
请注意,在问题中存在语法错误。 这条线
x.overrideMimeType("application/j-son;charset=UTF-8");
应该读
x.overrideMimeType("application/json; charset=UTF-8");
这也有很大的不同。
删除JsonData上的[],前面和最后一个,它可以正常工作。
禁用Firebug Lite为我解决了这个问题。
组合的错误:jQuery 1.4,ajax / json,Firebug Lite和IE 8
这是一个有效的例子并经过测试!
json源代码如下(pie.json):
[{ "label": "Series1", "data": 10}, { "label": "Series2", "data": 30}, { "label": "Series3", "data": 90}, { "label": "Series4", "data": 70}, { "label": "Series5", "data": 80}, { "label": "Series6", "data": 110}]
首先,尝试确定问题是否与一般JSON编码/解码有关。 尝试更简单的对象,使用数字和纯字符串,然后使用带引号的HTML。
在让JSON工作之后,你真的应该考虑从那里删除HTML。 更好的方法是移动数据,并将演示文稿详细信息留给模板。 使用AJAX时,这意味着HTML中的隐藏模板,并使用jQuery复制它并填充数据。 检查任何jQuery 模板插件 。 其中, jTemplates是最受欢迎的。
我想你问的是错误的问题。 使用$ .getJSON()要容易得多,如果你遇到问题,最好还是要求$ .getJSON()而不是$ .ajax()。 您可能还会发现有用的getJSON函数源代码,因为我看到,你在mimeTypes中有很多无用的东西。 那不是那样的。
您尝试解析的值包含在方括号[]中,这意味着它是一个数组。 您正在尝试评估数组。 尝试评估数组的第一个元素,它应该工作…
var json = eval("("+data[0]+");");
另外,我建议使用此处提供的JSON.parse()而不是直接调用eval()。
我收到了类似的错误。 花了一些时间才发现 – 我很少知道PHP自PHP5.2起就没有(本机地)支持JSON。 关键提醒……
昨天在$。 Ajax仍然没有错误,今天引用了错误,有人说parsererror jquery版本的问题,我用的是jquery-1.3.2.min.js,昨天。 这个版本也完成了,今天就被淘汰了。 数据来源:没有变化。 不知道是什么原因?
这可能是因为您的输出缓冲区不为空,因此AJAX接收不属于JSON的字节。
在使用echo
或die()
输出json之前,尝试使用服务器端的ob_clean()
清理缓冲区。 而且您不需要指定contentType
,我认为您的默认值将正常工作。
我有同样的问题,它解决了它。
希望能帮到你。
在我的情况下,错误是由json中的html标记引起的。
INCORRECT(parsererror)
{"msg": "Gracias,< br >Nos pondremos en contacto."}
正确
{"msg": "Gracias, nos pondremos en contacto."}
浏览器:IE7 / IE8
也尝试这个
$.ajax({ url: url, data:datas, success:function(datas, textStatus, jqXHR){ var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{'))); })};
在我的情况下,服务器在“{”之前以未知字符响应
不要使用数组框,并确保正确格式化数据:
{"account":{"iId":"1","heading":"Management Services","body":"Program Overview
January 29, 2009
"}}