2010-10-21 3 views
0

Est-il possible d'interagir avec un fichier XML après un appel $.ajax()?

IE:

.$ajax( 
url: "someUrl", 
type: "GET", 
dataType:"xml", 
success: function(xml){ //some function }, 
error : function(){ //some function} 
}); 

$("#somebutton").click(function(xml){ //function that interacts with XML }); 

Je n'ai pas été en mesure d'interagir avec un fichier XML de moins que toutes les fonctions sont à l'intérieur du paramètre success. Des conseils, ou dois-je simplement mettre toutes mes fonctions dans la fonction success? Y at-il une meilleure façon de faire ce que je décris que d'utiliser $.ajax()

Répondre

1

la fonction de succès est une fermeture qui s'exécute lorsqu'une réponse est revenue du serveur. La variable, xml n'est valide que dans le cadre de la fonction. Ce que vous pouvez faire est quelques choses:

  1. mettre vos gestionnaires dans le succès fonction
  2. créer une variable en dehors de l'appel ajax et dans la fonction succès affecter la valeur de XML à cette variable

donc:

var xmlObj = ""; 
$.ajax({ 
    success:function(xml) { 
    xmlObj = xml; 
    } 
}); 

alert(xmlObj); 
+0

Wow, je ne pensais même pas sur l'attribution xml à une variable globale. Merci! – Ian

1

les fonctions ne doivent pas être dans le plaisir de la réussite ction pour l'utiliser, mais la variable xml n'existe que dans la portée des fonctions de succès, vous devrez lui définir une autre variable.

ne fonctionne pas

$.ajax( 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ //some code }, 
    error : function(){ //some code} 
}); 

function parse() { 
    //xml processing code 
} 

Travaux

var myXML; 

$.ajax( 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ 
    myXML = xml; 
    //some code 
    }, 
    error : function(){ //some code} 
}); 

function parse() { 
    //myXML processing code 
} 

Aussi, si vous appelez avant l'appel parse AJAX a terminé avec succès, la variable myXML serait encore nulle. Pourrait toujours effectuer une vérification.

function parse() { 
    if (myXML) { 
    //myXML processing code 
    } else { 
    //ajax not completed successfully yet 
    } 
} 
+0

Merci pour les informations supplémentaires sur la variable globale. Une autre question: "if (myXML)" ne vérifie-t-il pas si la variable a été initialisée? Ou vérifie-t-elle si la variable a une valeur? – Ian

+0

Il vérifie que la variable n'est pas vide et n'est pas égale à 0 ou false. Donc, undefined, null, "", 0, et false donneront tous faux. Juste un moyen rapide de vérifier. Pas toujours le meilleur (selon la situation), mais ça fera l'affaire. – CastroXXL

1

Vous pouvez aussi le faire de cette façon qui ne nécessite pas des variables globales:

$.ajax({ 
    url: "someUrl", 
    type: "GET", 
    dataType:"xml", 
    success: function(xml){ 
     $("#somebutton").bind("click",{xmlData:xml}, buttonClick); 
    }, 
    error : function(){ /*some code*/ } 
}); 

function buttonClick(event) { 
    var xml = event.data.xmlData; 
    //function that interacts with XML 
}
+0

Merci pour la réponse. Je pense que mettre xml à une variable globale sera une meilleure solution pour moi pour ce projet, mais je garderai cette méthode à l'esprit pour les futurs projets! C'est génial de connaître de nombreuses façons d'accomplir ces choses! – Ian