JQuery getJSON - ajax parseerror
Я попытался разобрать следующий json-ответ как с JQuery getJSON, так и с ajax:
[{"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, но eval создает ошибки независимо от того, как я изменил JSON (заголовок типа контента, другие варианты формата и т.д.).
То, что я придумал, заключается в том, что, похоже, проблема с возвратом HTML в JSON и его анализом. Однако я надеюсь, что, возможно, я пропустил что-то, что позволило бы мне получить эти данные через JSON. У кого-нибудь есть идеи?
Ответы
Ответ 1
Строка 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"
});
И они оба отлично справились со мной.
Ответ 2
Если у кого-то все еще есть проблемы с этим, потому что ваш ответ должен быть строкой JSON и типом контента "application/json".
Пример для HTTP в asp.net(С#):
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write("{ status: 'success' }");
}
HTH,
Матти
Ответ 3
Пробовал ли вы XML-кодирование HTML (т.е. & lt; H1 & gt;)?
Ответ 4
Вы можете вернуть его в виде текста, а затем проанализировать его с помощью json.org parser
Чтобы увидеть, работает ли это по-другому
Ответ 5
Обратите внимание, что в вопросе есть синтаксическая ошибка. Строка с
x.overrideMimeType("application/j-son;charset=UTF-8");
должен читать
x.overrideMimeType("application/json; charset=UTF-8");
Это также имеет большое значение.
Ответ 6
Удалите [], спереди и последним в JsonData, и он работает.
Ответ 7
Отключение Firebug Lite исправило эту проблему для меня.
Ошибка с комбинацией: jQuery 1.4, ajax/json, Firebug Lite и IE 8
Ответ 8
Это рабочий пример и протестирован!
<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}]
Ответ 9
Во-первых, попытайтесь определить, есть ли проблема с общей кодировкой/декодированием JSON. попробуйте более простые объекты, с числами и обычными строками, затем с цитированным HTML.
После того, как вы заработаете JSON, вам действительно стоит подумать об удалении HTML-кода. Намного лучше перемещать только данные и оставлять детали презентации для шаблонов. При использовании AJAX это означает скрытый шаблон в HTML и использование jQuery для его репликации и заполнения данными. проверьте любой плагин jQuery . Из них jTemplates является общим фаворитом.
Ответ 10
Я думаю, что вы задаете неправильный вопрос. Использование $.getJSON() намного проще, и если у вас возникнет проблема с ним, лучше спросить $.getJSON(), чем для $.ajax().
Вы также можете найти полезный взгляд на исходный код функции getJSON, потому что я вижу, у вас много бесполезных вещей там с mimeTypes. Это не так.
Ответ 11
Значение, которое вы пытаетесь проанализировать, заключено в скобки [], что означает, что это массив. Вы пытаетесь определить массив. Попробуйте оценить первый элемент массива, и он должен работать...
var json = eval("("+data[0]+");");
Кроме того, я бы рекомендовал использовать JSON.parse() при условии здесь вместо прямого вызова eval().
Ответ 12
Я получил аналогичную ошибку. Понадобился немного времени, чтобы узнать - мало ли я знал, что PHP не поддерживает (изначально) JSON с PHP5.2. Критическое напоминание...
Ответ 13
Вчера в $. Ajax до сих пор не ошибается, сегодня процитирована ошибка, некоторые говорят, что проблема с jquery-версией parsererror, я использую jquery-1.3.2.min.js, вчера. Это издание также сделано, сегодня вымыто. Источники данных: без изменений. Не знаете, что такое причина?
Ответ 14
Возможно, потому, что ваш выходной буфер не пуст, поэтому AJAX получает байты, которые не принадлежат JSON.
Попробуйте очистить буфер с помощью ob_clean()
на стороне сервера непосредственно перед выходом json с помощью echo
или die()
. И вам не нужно указывать contentType
, я думаю, для вас значение по умолчанию будет работать правильно.
У меня была такая же проблема, и она ее разрешила.
Надеюсь помочь вам.
Ответ 15
в моем случае ошибка была вызвана тегом html в json.
INCORRECT (parsererror)
{"msg": "Gracias,< br >Nos pondremos en contacto."}
ПРАВИЛЬНОЕ
{"msg": "Gracias, nos pondremos en contacto."}
BROWSER: IE7/IE8
Ответ 16
попробуйте это
$.ajax({
url: url,
data:datas,
success:function(datas, textStatus, jqXHR){
var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{')));
})};
в моем случае сервер отвечает неявным символом до '{'
Ответ 17
Не используйте поле массива и убедитесь, что вы правильно отформатировали данные:
{"account":{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}}