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的字节。

在使用echodie()输出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

"}}