我试图用JQuery getJSON和ajax解析以下json响应:
[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}]
我也尝试过像这样转义“/”字符:
[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview <\/h1><h1>January 29, 2009<\/h1>"}]
当我使用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":"<h1>Program Overview </h1><h1>January 29, 2009</h1>"}]
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获取此数据的内容。有没有人有任何想法?
答案 0 :(得分:7)
您拥有的JSON字符串是一个内部有1个对象的数组,因此要访问该对象,您必须首先访问该数组。使用看起来像这样的json.php:
[
{
"iId": "1",
"heading": "Management Services",
"body": "<h1>Program Overview</h1><h1>January 29, 2009</h1>"
}
]
我刚试过这个
$.getJSON("json.php", function(json) {
alert(json[0].body); // <h1>Program Overview</h1><h1>January 29, 2009</h1>
alert(json[0].heading); // "Management Services"
alert(json[0].iId); // "1"
});
我也试过这个:
$.get("json.php", function(data){
json = eval(data);
alert(json[0].body); // <h1>Program Overview</h1><h1>January 29, 2009</h1>
alert(json[0].heading); // "Management Services"
alert(json[0].iId); // "1"
});
他们都对我很好。
答案 1 :(得分:3)
如果有人仍然遇到此问题,那是因为您的响应需要是JSON字符串和内容类型“application / json”。
asp.net(c#)中的HTTP示例:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write("{ status: 'success' }");
}
HTH,
马蒂
答案 2 :(得分:1)
您可以将其作为文本返回,然后使用json.org parser解析它 看它是否有所不同
答案 3 :(得分:1)
这是一个有效的例子并经过测试!
<script type="text/javascript">
function fetchData() {
var dataurl = "pie.json";
$.ajax({
url: dataurl,
cache: false,
method: 'GET',
dataType: 'json',
success: function(series) {
var data = [];
//alert(series.length);
for (var i=0; i<series.length;i++){
data[i]=series[i];
}
$.plot(
$("#placeholder"),
data,
{
series: {
pie: {
show: true,
label: {
show: true
}
}
},
legend: {
show: true
}
}
);
}
});
//setTimeout(fetchData, 1000);
}
</script>
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}]
答案 4 :(得分:1)
禁用Firebug Lite为我解决了这个问题。
Bug with combination of: jQuery 1.4, ajax/json, Firebug Lite and IE 8
答案 5 :(得分:1)
删除JsonData上前面和后面的[],它可以正常工作。
答案 6 :(得分:1)
请注意,问题中存在语法错误。
的行x.overrideMimeType("application/j-son;charset=UTF-8");
应该阅读
x.overrideMimeType("application/json; charset=UTF-8");
这也有很大的不同。
答案 7 :(得分:1)
您是否尝试对HTML进行XML编码(即&amp; lt; H1&amp; gt;)?
答案 8 :(得分:0)
您尝试解析的值包含在方括号[]中,这意味着它是一个数组。您正在尝试评估数组。尝试评估数组的第一个元素,它应该工作...
var json = eval("("+data[0]+");");
另外,我建议使用提供here的JSON.parse()而不是直接调用eval()。
答案 9 :(得分:0)
我认为你提出了错误的问题。使用$ .getJSON()要容易得多,如果你遇到问题,最好还是要求$ .getJSON()而不是$ .ajax()。 您可能还会发现有用的getJSON函数源代码,因为我看到,你在mimeTypes中有很多无用的东西。那不是那样的。
答案 10 :(得分:0)
我收到了类似的错误。花了一些时间才发现 - 我很少知道PHP自PHP5.2起就没有(本机地)支持JSON。关键提醒......
答案 11 :(得分:0)
昨天在$。 Ajax仍然没有错误,今天引用了错误,有人说parsererror jquery版本的问题,我用的是jquery-1.3.2.min.js,昨天。这个版本也完成了,今天就被淘汰了。数据来源:没有变化。不知道是什么原因?
答案 12 :(得分:0)
首先,尝试确定问题是否与一般JSON编码/解码有关。尝试使用数字和普通字符串的简单对象,然后使用带引号的HTML。
在您使用JSON之后,您真的应该考虑从那里删除HTML。更好的方法是移动数据,并将演示文稿详细信息留给模板。使用AJAX时,这意味着HTML中的隐藏模板,并使用jQuery复制它并填充数据。检查任何jQuery template plugins。其中,jTemplates是最受欢迎的。
答案 13 :(得分:0)
可能是因为您的输出缓冲区不为空,因此AJAX接收不属于JSON的字节。
在输出带有ob_clean()
或echo
的json之前,尝试在服务器端使用die()
的干净缓冲区。而且您不需要指定contentType
,我认为您的默认值将正常工作。
我遇到了同样的问题并解决了它。
希望能帮到你。
答案 14 :(得分:0)
在我的情况下,错误是由json中的html标记引起的。
INCORRECT(parsererror)
{"msg": "Gracias,< br >Nos pondremos en contacto."}
CORRECT
{"msg": "Gracias, nos pondremos en contacto."}
浏览器:IE7 / IE8
答案 15 :(得分:0)
也试试这个
$.ajax({
url: url,
data:datas,
success:function(datas, textStatus, jqXHR){
var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{')));
})};
在我的情况下,服务器在'{'
之前以未知字符响应答案 16 :(得分:0)
请勿使用数组框,并确保正确格式化数据:
{"account":{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}}