2010-12-13 38 views
0

ma première alerte montre la liste des éléments mais la seconde ne l'est pas. Je n'ai jamais rien fait dans ajax/js avant donc je ne sais pas comment retourner mon tableau afin qu'il soit visible par d'autres fonctions.js comment rendre mon tableau visible par d'autres fonctions

var mycarousel_itemList = []; 

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "xml/images.xml", 
     dataType: "xml", 
     success: function (xml) { 

      $(xml).find('image').each(function() { 
       var id = $(this).attr('id'); 
       var url = $(this).find('url').text(); 
       mycarousel_itemList.push('{url:"' + url + '",' + 'id:"' + id + '"}'); 

       alert(mycarousel_itemList); 
      }); 
     } 
    }); 
    alert(mycarousel_itemList); 
}); 

Voici comment mon xml ressemble

<images> 
    <image id="1"> 
    <title>item</title> 
    <url>images/image.gif</url> 
    <desc>description of an item</desc> 
    </image> 
    <image id="2"> 
    <title>anotheritem</title> 
    <url>images/images.gif</url> 
    <desc>description of an item</desc> 
    </image> 
</images> 
+0

Où est votre deuxième alerte? Ou faites-vous simplement référence à la deuxième fois que la routine 'ajax.get' est exécutée? –

+0

S'il vous plaît ne pas poster de mises à jour à votre question en tant que réponses (ci-dessous). Stack Overflow n'est pas un site formaté en forum. Vous devriez éditer votre question, en utilisant ce petit lien [edit] (http://stackoverflow.com/posts/4433404/edit). –

+1

Voir [cette question] (http://stackoverflow.com/questions/562412/return-value-from-function-with-an-ajax-call) pour une explication du problème de base: ** le code s'exécute de manière asynchrone. ** Aussi, pourquoi avez-vous tagué votre question avec JSON lorsque vous utilisez XML? –

Répondre

0

Le tableau mycarousel_itemList n'est pas déclarée dans une fonction et est donc globale. Vous devriez pouvoir accéder au tableau dans votre fonction d'événement success.

Il y a quelque chose de bizarre avec votre exemple spécifique (par exemple, la fonction success ne reçoit pas de réponse car le serveur ne répond pas).

Si je copier et coller votre code et simplement remplacé le composant côté serveur avec un service de JSONP (juste pour que je puisse faire AJAX à travers des domaines), je n'ai pas de problème pour accéder au tableau:

var mycarousel_itemList = []; 

$(document).ready(function() { 
    var url = "http://github.com/api/v2/json/user/show/yui"; 
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "jsonp", 
     success: function (data) { 
       mycarousel_itemList.push(data.user.company + ' - ' + data.user.blog); 
       alert(mycarousel_itemList[0]); 
     } 
    }); 
}); 

Vous peut test it out here.

0

Pour répondre à la question directe: il n'est pas possible de remplir le tableau lorsque la deuxième alerte est appelée car l'appel AJAX n'a ​​pas eu le temps de se terminer à ce moment-là.

Quelle fonction exactement besoin de ce tableau? Il suffit de l'appeler à partir de la méthode success après avoir rempli le tableau et cela fonctionnera très bien.