Gracias por el A2A …
Basado en lo que creo que estás tratando de hacer, aquí están mis recomendaciones basadas en el supuesto de que estás usando jQuery. Tenga en cuenta que esta es una respuesta larga con múltiples ejemplos que logran lo mismo , ya que jQuery le brinda muchas maneras de desollar a un gato.
Este primer enfoque es básicamente un refactorizador del código al que se vinculó. No puede simplemente devolver datos de la función de devolución de llamada success () . En su lugar, debe hacer algo como esto usando una var global :
- ¿Es posible ser un programador exitoso sin creatividad?
- ¿Qué habilidades se necesitan para usar un marco web como Laravel o Django?
- ¿Puedo enviar datos de fila desde una tabla HTML en una página PHP a otra tabla HTML en otra página PHP con montaje de filas?
- ¿Hay alguna herramienta escrita en Python que me permita publicar un blog muy simple sin tener que jugar con HTML?
- ¿Por qué mi cadena SQL con comillas simples no se inserta?
$ .ajax ({
url: ‘xxx.json’, // Esta debe ser una ruta relativa (es decir, ../path/to/xxx.json) o una ruta absoluta (es decir, http://host.com/path/to/xxx.json)
tipo: ‘OBTENER’,
dataType: ‘json’,
éxito: función (config) {
// Haga algo con config.version en lugar de regresar.
// Si necesitas que config.version sea accesible desde cualquier lugar
// en tu código, deberás repetir esta lógica
// donde sea que lo necesite, o defina una variable global,
// como window.global.version. Esta variable global
// será accesible desde cualquier parte de su código, y usted
// puede considerar configurar esto desde el principio
// con tu lógica init / bootstrap.
window.global.version = config.version;
// o simplemente almacena el objeto de respuesta completo …
window.config = config;
}
});
NOTA: No necesita la propiedad de datos como tenía en su código de muestra ya que solo está leyendo datos estáticos del archivo JSON.
Un atajo para $ .ajax () es $ .get () . Como solo está haciendo una solicitud GET a un archivo estático, puede usar $ .get () para realizar exactamente la misma llamada AJAX, de la siguiente manera:
$ .get ({
url: ‘xxx.json’,
dataType: ‘json’,
éxito: función (config) {
// Los mismos comentarios que arriba
}
});
O un camino más corto …
$ .get (‘xxx.json’, función (config) {
// Los mismos comentarios que arriba. Esto es solo un atajo para
// * éxito * devolución de llamada en la firma $ .get ().
}, ‘json’);
O incluso más corto pero usando Diferido / Promesas …
NOTA: El ejemplo de Evan es un poco redundante porque en jQuery, la función $ .ajax () y todas sus derivadas ya devuelven una Promesa. No es necesario instanciar un nuevo $ .Deferred (); objetar con este ejemplo, pero hay casos de uso válidos para hacerlo. Lo que estás tratando de lograr no lo necesita.
$ .get (‘xxx.json’, function () {}, ‘json’). success (function (config) {
// Los mismos comentarios que arriba, pero aprovechando jQuery’s Deferred / Promise.
});
// O …
$ .get (‘xxx.json’, function () {}, ‘json’). done (function (config) {
// Igual que el anterior, usando la devolución de llamada * done () *
});
O de manera similar, al pasar un objeto a $ .get () …
$ .get ({
url: ‘xxx.json’,
dataType: ‘json’
}). done (function (config) {
// O la otra forma de usar $ .get ()
});
Tenga en cuenta que cualquiera de los anteriores podría incluirse en una función como getVersion () , getConfig () , etc. si lo desea. Por ejemplo, si no desea utilizar una var global como mencioné anteriormente , puede manejar la Promesa que devuelve $ .ajax () o $ .get () en una función global:
función getConfig () {
return $ .get ({
url: ‘xxx.json’,
dataType: ‘json’
});
}
// …
getConfig (). done (function (config) {
if (config.version> = 1) {
// Hacer algo
}
});
// … luego en otro lugar de tu código
getConfig (). done (function (config) {
if (config.my_other_config_setting! = blah) {
// Hacer algo más
}
});
O también puede usar la devolución de llamada success () si lo prefiere en lugar de done () .
getConfig (). success (function (config) {
if (config.version> = 1) {
// Hacer algo
}
});
NOTA: success () regresa antes de terminar (). Entonces podría encadenar su lógica de la siguiente manera:
getConfig (). success (function (config) {
if (config.version> = 1) {
// Hacer algo
}
}). done (function (config) {
if (config.foo == bar) {
// Hacer algo más.
}
});
Espero haber sido claro en mis ejemplos. Si tienes mas preguntas, solo pregunta. Hay otras cosas que podría hacer para hacer esto aún más robusto … pero creo que eso irá más allá del alcance de lo que está tratando de lograr.