Question Comment retourner le texte de réponse AJAX? [dupliquer]


Cette question a déjà une réponse ici:

J'utilise un prototype pour faire mon développement AJAX, et j'utilise le code comme ceci:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
            }
        }
    });
    return result;
}

Et je trouve que le "résultat" est une chaîne vide. Donc, j'ai essayé ceci:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                return result;
            }
        }
    });

}

Mais cela n'a pas fonctionné aussi. Comment puis-je obtenir le responseText pour une autre méthode à utiliser?


40
2017-08-04 03:55


origine


Réponses:


rappelez-vous que onComplete est appelé longtemps après que la fonction someFunction est terminée. Ce que vous devez faire est de passer une fonction de rappel à la fonction partielle en tant que paramètre. Cette fonction sera appelée lorsque le processus sera terminé (par exemple, onComplete):

somefunction: function(callback){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                callback(result);
            }
        }
    });

}
somefunction(function(result){
  alert(result);
});

28
2017-08-04 04:01



Que diriez-vous d'ajouter "asynchrone: false" dans votre code? Dans mon cas, ça marchait bien :)


3
2017-08-10 14:57