Problèmes avec la manipulation des tableaux obtenus de php en utilisant jquery ajax

Goog Morning, tout le monde.

J’ai encore quelques problèmes en essayant d’utiliser des tableaux qui ont été obtenus à partir de php. Le problème est que lorsque je reçois un tableau, je ne peux pas l’utiliser hors de la “fonction de réussite”. C’est donc ce qui se passe.

Je crée une var appelée “langs” pour sauvegarder les informations du tableau:

var langs=[]; 

Ensuite, lorsque j’utilise console.log pour le succès de la fonction INSIDE des informations du tableau d’impression, mon code ressemble à ceci:

 $.ajax({ type: 'POST', url: '/ws/languagesForJs', dataType: 'json', success: function(result) { langs=result; console.log(result) }, }); 

Cela fonctionne très bien !! Je peux voir les informations du tableau. Cela ressemble à ceci:

 Object {es: Object, en: Object} en: Object lang_ext_name: "en_US" lang_id: 2 lang_iso: "en" lang_name: "Inglés" lang_url: "en" __proto__: Object es: Object lang_ext_name: "es_PE" lang_id: 1 lang_iso: "es" lang_name: "Español" lang_url: "es" __proto__: Object __proto__: Object 

CEPENDANT, lorsque j’utilise console.log pour le succès de la fonction OUTSIDE des informations du tableau d’impression:

 $.ajax({ type: 'POST', url: '/ws/languagesForJs', dataType: 'json', success: function(result) { langs=result; }, }); console.log(result) 

Ça revient juste;

 [] 

Sincèrement, je ne sais pas pourquoi cela se produit. Peut-être que je manque la théorie de quelque fonction ou quelque chose. J’ai cherché des informations sur le Web, mais il semble que personne n’ait besoin d’un tableau en dehors des fonctions de réussite. Je n’ai trouvé aucune information à ce sujet.

J’espère que quelqu’un pourra m’aider. Merci

Btw: Désolé pour mon mauvais anglais. Ce n’est pas ma langue maternelle.

Il y a 2 problèmes ici.

  1. Le résultat est local pour le rappel de succès. Vous avez access aux langues en dehors du rappel, car il ne semble pas avoir une scope globale.
  2. Le rappel a lieu de manière asynchrone. Cela entraînera probablement l’appel de console.log avant le rappel de réussite. Il serait peut-être intéressant d’examiner les objects de promesse ajax de jQuery, http://api.jquery.com/jQuery.ajax/ .

Le result est une variable locale. Vous devez créer une référence en dehors de votre appel ajax. Vous pourrez ainsi la référencer sans problème.

Essaye ça:

 var myResult; $.ajax({ type: 'POST', url: '/ws/languagesForJs', dataType: 'json'}) .done(function(result) { myResult = result; // save a reference langs = result; }) .always(function() { console.log(myResult); }); 

Je devrais également mentionner que le success est déconseillé et que vous devriez aller plutôt pour le travail done . Le callback always est appelé comme les noms le disent toujours pour que vous puissiez y mettre du code qui doit être exécuté lorsque l’appel asynchrone est terminé.

J’espère que ça aide.