[英]JQuery getJSON - ajax parseerror
我試圖用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獲取此數據的內容。 有沒有人有任何想法?
您擁有的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"
});
他們都對我很好。
如果有人仍然遇到問題,那是因為你的響應需要是一個JSON字符串和內容類型“application / json”。
asp.net(c#)中的HTTP示例:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write("{ status: 'success' }");
}
心連心,
馬蒂
這是一個有效的例子並經過測試!
<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}]
請注意,在問題中存在語法錯誤。 這條線
x.overrideMimeType("application/j-son;charset=UTF-8");
應該讀
x.overrideMimeType("application/json; charset=UTF-8");
這也有很大的不同。
刪除JsonData上前面和后面的[],它可以正常工作。
禁用Firebug Lite為我解決了這個問題。
您是否嘗試過對HTML進行XML編碼(即&lt; H1&gt;)?
您可以將其作為文本返回,然后使用json.org解析器進行解析
看它是否有所不同
也嘗試這個
$.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":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}}
我收到了類似的錯誤。 花了一些時間才發現 - 我很少知道PHP自PHP5.2起就沒有(本機地)支持JSON。 關鍵提醒......
昨天在$。 Ajax仍然沒有錯誤,今天引用了錯誤,有人說parsererror jquery版本的問題,我用的是jquery-1.3.2.min.js,昨天。 這個版本也完成了,今天就被淘汰了。 數據來源:沒有變化。 不知道是什么原因?
這可能是因為您的輸出緩沖區不為空,因此AJAX接收不屬於JSON的字節。
在使用echo
或die()
輸出json之前,嘗試使用服務器端的ob_clean()
清理緩沖區。 而且您不需要指定contentType
,我認為您的默認值將正常工作。
我有同樣的問題,它解決了它。
希望能幫到你。
首先,嘗試確定問題是否與一般JSON編碼/解碼有關。 嘗試使用數字和普通字符串的簡單對象,然后使用帶引號的HTML。
在讓JSON工作之后,你真的應該考慮從那里刪除HTML。 更好的方法是移動數據,並將演示文稿詳細信息留給模板。 使用AJAX時,這意味着HTML中的隱藏模板,並使用jQuery復制它並填充數據。 檢查任何jQuery 模板插件 。 其中, jTemplates是最受歡迎的。
我想你問的是錯誤的問題。 使用$ .getJSON()要容易得多,如果你遇到問題,最好還是要求$ .getJSON()而不是$ .ajax()。 您可能還會發現有用的getJSON函數源代碼,因為我看到,你在mimeTypes中有很多無用的東西。 那不是那樣的。
您嘗試解析的值包含在方括號[]中,這意味着它是一個數組。 您正在嘗試評估數組。 嘗試評估數組的第一個元素,它應該工作...
var json = eval("("+data[0]+");");
另外,我建議使用此處提供的JSON.parse()而不是直接調用eval()。
在我的情況下,錯誤是由json中的html標記引起的。
INCORRECT(parsererror)
{"msg": "Gracias,< br >Nos pondremos en contacto."}
正確
{"msg": "Gracias, nos pondremos en contacto."}
瀏覽器:IE7 / IE8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.