Datos XML en una sola variable usando JQuery
Frecuentes
Visto 1,032 equipos
0
Imagina que tienes un archivo data.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<item>value1</item>
<item>value2</item>
<item>value3</item>
</root>
Estoy tratando de almacenar toda la configuración de datos en una sola variable para usarla en mi código .js usando esto:
$(document).ready(function() {
'use strict';
jQuery.extend({
getValues: function(url) {
var result = null;
$.ajax({
url: url,
type: 'get',
dataType: 'xml',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
});
results = $.getValues("data.xml");
console.log(results);
});
Si actualizo la página obtengo en la variable de resultados un objeto Documento con campos como URL, baseURI, cuerpo...
Si vuelvo a actualizar, obtengo en los resultados un objeto #document con los datos del archivo data.xml:
<root>
<item>value1</item>
<item>value2</item>
<item>value3</item>
</root>
Entonces, el tipo de objeto devuelto cambia cada vez que alguien va a la URL.
Tengo dos preguntas sobre esto:
¿Cómo puedo hacer que el valor devuelto sea siempre #documento? (que contiene los datos del archivo .xml)
¿Cómo puedo acceder a un elemento de #document?
He intentado usar:
console.log(results.root.item);
console.log(results.find("item"));
Pero ambos me dan errores.
Tal vez haya una mejor manera de hacer esto (es decir, leer datos xml en una sola variable).
¿Alguna sugerencia?
2 Respuestas
1
Está devolviendo el resultado antes de que finalice la solicitud de ajax. Debe esperar a que regrese el ajax, luego llamar a una función de devolución de llamada:
$(document).ready(function() {
'use strict';
jQuery.extend({
getValues: function(url, callback) {
var result = null;
$.ajax({
url: url,
type: 'get',
dataType: 'xml',
async: false,
success: function(data) {
callback.call(this, data);
}
});
}
});
$.getValues("data.xml",function(data){
console.log(data);
});
});
Respondido el 01 de junio de 12 a las 13:06
0
puede seleccionar etiquetas xml de esta manera:
success: function(data) {
parser(data);
}
function parser(data) {
...
}
Respondido el 01 de junio de 12 a las 13:06
Pero quiero seleccionar las etiquetas xml fuera de la función de éxito de ajax, una vez que se haya devuelto el xml. - rfc1484
@ rfc1484 puede crear una función y pasarle los datos ajax. - indefinido
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery xml or haz tu propia pregunta.
Tiene razón, pero para que funcione tuve que eliminar la propiedad "async". Ahora solo necesito saber cómo acceder a un elemento de la variable de datos. - rfc1484
@ rfc1484 oh, me perdí la opción asíncrona. dado que sus datos son xml, puede usar jquery regular para acceder a los elementos:
var xml = $(data);
entonces por ejemploxml.find('someelement').attr('someattribute');
- Andy