Cómo leer datos de JQuery getJSON
Frecuentes
Visto 5,855 veces
2
Estoy luchando con getJSON. Tengo una aplicación StockWatcher simple que devuelve los datos en formato JSON
http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q=ABC+DEF+PQR
Salida:
({
"stocks": [{
"symbol": "ABC",
"price": 80.11611442288577,
"change": 1.4332410131550721
}, {
"symbol": "DEF",
"price": 89.47611015580729,
"change": -1.469336678470048
}, {
"symbol": "PQR",
"price": 99.60017237722221,
"change": -1.3303545392913447
}]
})
Cuando uso una función Javascript simple para leer esto, aparece un error (.error, .complete y .second complete)
He usado Firebug para depurar esto y puedo ver que puedo recuperar el objeto pero veo un error XML
Error de análisis XML: error de sintaxis Ubicación: moz-nullprincipal:{0daef08f-94bc-4bea-879f-6456e8175e38} Número de línea 1, columna 1:
({"stocks": [ ^
Aquí está el Javascript.
<script type="text/javascript">
$(document).ready(function(){
var url='http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q=';
var query;
$('button').click(function(){
query=$("#query").val();
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON(url, function(data) {
var obj = $.parseJSON(data);
$.each(obj,function(i,item){
$("#results").append('Title:'+item.symbol+' == Price:'+item.price+'</p>');
});
})
.success(function(data) { alert("second success"); })
.error(function(data) { alert("error"); })
.complete(function(data) { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
});
});
</script>
He experimentado con varias opciones llamando a parseJSON y sin parseJSON, pero parece que no funciona.
2 Respuestas
1
Creo que estás buscando algo más como esto... Prueba:
$(document).ready(function(){
var url='http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q=';
var query;
$('button').click(function(){
query=$("#query").val();
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
$.ajax({
url : url,
type: "GET",
dataType: "json",
success: function(data) {
$.each(data.stocks,function(i,item){
$("#results").append('Title:'+item.symbol+' == Price:'+item.price+'</p>');
});
},
error: function(data) { alert("error"); },
});
// perform other work here ...
});
});
contestado el 23 de mayo de 12 a las 15:05
Tenía la intención de hacerlo .ajax y luego me puse a trabajar. - Jason
Ok, hice dos cosas como ambos sugirieron. En primer lugar, eliminé el inicio "(" y el final ")" en los datos JSON. En segundo lugar, cambié la llamada de .getJSON a .ajax, un cambio menor fue que tenía que hacer referencia a las acciones en los datos. $.each(data.stocks,function(i,item...... Mi pregunta: ¿Cuál es el propósito de .getJSON? Pensé que era un contenedor alrededor de .ajax que GET - Rajesh Jain
0
Si usa "(" y ")" en su JSON original, intente esto:
{
"stocks": [
{
"symbol": "ABC",
"price": 80.11611442288577,
"change": 1.4332410131550721
},
{
"symbol": "DEF",
"price": 89.47611015580729,
"change": -1.469336678470048
},
{
"symbol": "PQR",
"price": 99.60017237722221,
"change": -1.3303545392913447
}
]
}
contestado el 22 de mayo de 12 a las 21:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery json or haz tu propia pregunta.
¿Realmente regresa del servidor con el () alrededor (como en su ejemplo ({"stocks": [ { ... ]}) )? Porque pegué todo dentro del paréntesis ({"stocks": [ { ... ]}) en la herramienta en línea json.parser.online.fr y lo tradujo correctamente a un objeto, tal como lo haría parseJSON. PD: asumiendo que hay paréntesis que causan un problema, no necesitará parseJSON porque getJSON() se encargará de eso. - John Munsch
@JohnMunsch: Estaba pensando lo mismo. El
()
están causando este error, piérdalos. - Rocket Hazmat¿Su página también se está ejecutando en
http://localhost:8080
? De lo contrario, necesita JSONP en lugar de JSON. También,$.getJSON
lo analiza por ti, no necesitas$.parseJSON
. - Rocket Hazmat