Renvoyer le code HTML de l’appel .ajax

Je suis indéfini pour une raison quelconque lorsque j’essaie de renvoyer le code HTML via la fonction de rappel:

function getDataFromUrl(urlWithContent) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { return $('.result').html(data); }, error: function(e) { alert('Error: ' + e); } }); } 

Je sais que je récupère des données, je les vois dans firebug dans la réponse et, lorsque je les alerte, le contenu de la page s’affiche dans son intégralité dans la zone d’alerte.

Lorsque j’appelle ma fonction, je procède comme suit:

 var divContent = getDataFromUrl(dialogDiv.attr("href")); if(divContent) dialogDiv.innerHTML = divContent; 

quand j’alerte le divContent (avant la déclaration if), je deviens indéfini. Peut-être que je me trompe simplement sur la façon dont je retourne les données?

J’ai aussi essayé de renvoyer des données; Même chose, je suis indéfini après l’appel de cette méthode lorsqu’il est défini sur ma variable.

Mis à jour par réponses:

Essayé cela, toujours indéfini:

 function getDataFromUrl(urlWithContent, divToUpdate) { $.ajax( { url: urlWithContent, aSync: false, dataType: "html", success: function(data) { divToUpdate.innerHTML = data; }, error: function(e) { alert('Error: ' + e); } }); } 

Je l’ai appelé depuis une autre fonction comme celle-ci:

 var divContent = ""; if (dialogDiv.attr("href")) { getDataFromUrl(dialogDiv.attr("href"), divContent); } 

Vous ne pouvez pas renvoyer de données à partir du rappel – car rien ne garantit que les données auront été renvoyées par la fonction au moment où elle se ferme (car il s’agit d’un appel asynchrone .)

Ce que vous devez faire est de mettre à jour le contenu dans le rappel, comme:

 success: function(data) { $('#dialogDiv').html(data); }, 

où votre dialog DIV a id="dialogDiv" attaché.

Je pense que vous pouvez également modifier votre fonction pour prendre l’object à mettre à jour lorsque l’appel se termine comme suit:

 function getDataFromUrl(urlWithContent, divToUpdate) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { divToUpdate.innerHTML = data; }, error: function(e) { alert('Error: ' + e); } }); } 

Puis appelez-le comme dialogDiv (où dialogDiv est l’object représentant la DIV à mettre à jour comme dans votre exemple.)

 getDataFromUrl(dialogDiv.attr("href"), dialogDiv); 

L’appel ajax s’exécute de manière asynchrone. Par conséquent, votre fonction retourne (en abandonnant la fin du bloc) avant la fin de votre appel ajax. Vous avez deux façons de gérer cela. Ajoutez l’option aSync: false pour forcer l’appel ajax à s’exécuter de manière synchrone ou utilisez un rappel de votre fonction pouvant être exécuté à la fin de l’appel ajax. Je préférerais le dernier.

 function setDataFromUrl(urlWithContent,callback) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { callback(data); }, error: function(e) { alert('Error: ' + e); } }); } setDataFromUrl(dialogAnchor.attr("href"), function(data) { dialogDiv.html(data); }); 

ou même mieux, sauf si vous partagez ce code dans de nombreux endroits:

 var dialogDiv = $('div.dialog'); var dialogAnchor = dialogDiv.find('a'); // jQuery async request $.ajax( { url: dialogAnchor.attr('href'), dataType: "html", success: function(data) { dialogDiv.html(data); }, error: function(e) { alert('Error: ' + e); } }); 

Pourquoi n’essayez-vous pas ceci:

 function getDataFromUrl(urlWithContent) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { $('#dialogDiv').html(data); }, error: function(e) { alert('Error: ' + e); } }); } 

Et il suffit d’appeler la fonction et de ne l’atsortingbuer à aucune variable.

HTH