JQuery getJSON – ajax parseerror

Ho cercato di analizzare la seguente risposta JSON con JQuery getJSON e ajax:

[{"iId":"1","heading":"Management Services","body":"

Program Overview

January 29, 2009

"}]

Ho anche provato a sfuggire i caratteri “/” in questo modo:

 [{"iId":"1","heading":"Management Services","body":"

Program Overview

January 29, 2009"}]

Quando uso il getJSON, la dose non esegue il callback. Quindi, l’ho provato con JQuery ajax come segue:

 $.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); } }); 

L’ajax colpisce l’errore e segnala quanto segue:

 XMLHttpRequest=[{"iId":"1","heading":"Management Services","body":"

Program Overview

January 29, 2009

"}] textStatus=parseerror errorThrown=undefined

Poi ho provato una semplice chiamata JQuery per restituire il JSON usando il seguente codice:

 $.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"); }) 

Il .get restituisce il JSON, ma la valutazione mostra errori, non importa come ho modificato il JSON (intestazione del tipo di contenuto, altre varianti del formato, ecc.)

Quello che mi è venuto in mente è che sembra esserci un problema nel restituire l’HTML nel JSON e averlo analizzato. Tuttavia, spero di aver perso qualcosa che mi avrebbe permesso di ottenere questi dati tramite JSON. Qualcuno ha qualche idea?

La stringa JSON che hai è una matrice con 1 object al suo interno, così per accedere all’object devi prima accedere all’array. Con un json.php che assomiglia a questo:

 [ { "iId": "1", "heading": "Management Services", "body": "

Program Overview

January 29, 2009

" } ]

Ho appena provato questo

 $.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" });

Ho anche provato questo:

 $.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" });

Ed entrambi hanno funzionato bene per me.

Se qualcuno ha ancora problemi con questo è perché la tua risposta deve essere una stringa JSON e tipo di contenuto “application / json”.

Esempio per HTTP in asp.net (c #):

 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; context.Response.Write("{ status: 'success' }"); } 

hth,

Matti

Hai provato la codifica XML dell’HTML (es. & Lt; H1 & gt;)?

Puoi farlo tornare come testo e quindi analizzarlo con il parser di json.org
Per vedere se funziona diversamente

Si prega di notare che nella domanda c’è un errore di syntax. La linea con

 x.overrideMimeType("application/j-son;charset=UTF-8"); 

dovresti leggere

 x.overrideMimeType("application/json; charset=UTF-8"); 

Anche questa fa una grande differenza.

Rimuovi [], davanti e ultimo su JsonData, e funziona.

Disabilitare Firebug Lite ha risolto questo problema per me.

Bug con combinazione di: jQuery 1.4, ajax / json, Firebug Lite e IE 8

Questo è un esempio funzionante e testato!

  

E la fonte JSON è la seguente (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}] 

Innanzitutto, prova a individuare se il problema riguarda la codifica / decodifica JSON generale. prova con oggetti più semplici, con numeri e stringhe semplici, quindi con HTML citato.

Dopo aver fatto funzionare JSON, dovresti davvero prendere in considerazione la possibilità di rimuovere l’HTML da lì. Molto meglio è spostare solo i dati e lasciare i dettagli della presentazione ai modelli. Quando si utilizza AJAX, ciò significa un modello nascosto nel codice HTML e utilizzare jQuery per replicarlo e riempirlo con i dati. controlla tutti i plugin del template jQuery. Di questi, jTemplates è un preferito in comune.

Penso che tu stia facendo una domanda sbagliata. L’utilizzo di $ .getJSON () è molto più semplice e, se hai problemi con esso, sarebbe meglio chiedere $ .getJSON () rispetto a $ .ajax (). Potresti anche trovare utile guardare il codice sorgente della funzione getJSON, perché, vedo, hai un sacco di cose inutili lì con mimeTypes. Non è questo il modo.

Il valore che stai cercando di analizzare è racchiuso tra parentesi [], il che significa che è un array. Stai cercando di valutare un array. Prova a valutare il primo elemento dell’array, e dovrebbe funzionare …

 var json = eval("("+data[0]+");"); 

Inoltre, ti consiglio di utilizzare JSON.parse () fornito qui invece di chiamare eval () direttamente.

Ho ricevuto un errore simile. Ci ho messo un po ‘a scoprirlo – non sapevo che PHP non ha (nativamente) supportato JSON da PHP5.2. Promemoria critico …

Ieri a $. Ajax ancora nessun errore, oggi è citato l’errore, alcuni dicono la versione jquery di parsererror del problema, quello che uso è jquery-1.3.2.min.js, ieri. Anche questa edizione è stata fatta, oggi è lavata. Fonti di dati: nessun cambiamento. Non so quale sia la ragione?

Forse perché il buffer di output non è vuoto, quindi AJAX riceve byte che non appartengono al JSON.

Prova il buffer pulito con ob_clean() sul lato server appena prima di emettere il tuo json con echo o die() . E non è necessario specificare contentType , penso che il valore predefinito funzioni correttamente.

Ho avuto lo stesso problema e lo risolve.

Spero di aiutarti.

nel mio caso, l’errore è stato causato da un tag html in the json.

NON CORRETTO (parsererror)

 {"msg": "Gracias,< br >Nos pondremos en contacto."} 

CORRETTA

 {"msg": "Gracias, nos pondremos en contacto."} 

BROWSER: IE7 / IE8

anche provare questo

 $.ajax({ url: url, data:datas, success:function(datas, textStatus, jqXHR){ var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{'))); })}; 

nel mio caso il server risponde con un carattere sconosciuto prima di ‘{‘

Non utilizzare una scatola matrice e assicurati di formattare correttamente i dati:

 {"account":{"iId":"1","heading":"Management Services","body":"

Program Overview

January 29, 2009

"}}