2012-01-24 3 views
0

J'ai vu les fils innombrables affalés sur Internet sur le code similaire suivant dans une requête AJAX renvoyant undefined:AJAX - Retour responseText

AJAX.onreadystatechange = function() { 
     if(AJAX.readyState == 4) { 
      if(AJAX.status == 200) { 
       var response = AJAX.responseText; 
       return response; 
      } 
      else { 
       window.alert('Error: ' + AJAX.status); 
       return false; 
      } 
     } 
}; 

Je sais que je suis censé « faire quelque chose avec » responseText comme l'écrivant au HTML. Le problème: Je n'ai pas ce luxe. Ce bit de code est destiné à être à l'intérieur d'une méthode générique pour exécuter des requêtes AJAX rapides de sorte que tout le code pour faire une requête AJAX ne doit pas être écrit encore et encore (~ 40 ×) avec une chance d'être mineur problème ici ou là qui casse l'application.

Ma méthode A pour explicitement return responseText "ou sinon." Aucune écriture au format HTML. Comment est-ce que je ferais ceci? En outre, j'apprécierais un manque de prises pour JQuery.

Ce que je suis à la recherche:

function doAjax(param) { 
    // set up XmlHttpRequest 
    AJAX.onreadystatechange = function() { 
      if(AJAX.readyState == 4) { 
       if(AJAX.status == 200) { 
        var response = AJAX.responseText; 
        return response; 
       } 
       else { 
        window.alert('Error: ' + AJAX.status); 
        return false; 
       } 
      } 
    }; 
    // send data 
} 
... 
function doSpecificAjax() { 
    var param = array(); 
    var result = doAjax(param); 
    // manipulate result 
} 
+0

Pourriez-vous expliquer davantage ce que signifie "ne pas écrire en HTML"? –

+0

Comme dans aucune écriture le résultat à un 'div' comme un moyen de stockage pour la valeur. –

+0

Alors, pourriez-vous juste retourner "" si responseText n'a rien? –

Répondre

3

Faire une petite recherche je suis tombé sur ce poste SOF: Ajax responseText comes back as undefined

Sur la base de ce poste, il semble que vous pouvez mettre en œuvre votre ajax méthode comme ceci:

function doRequest(url, callback) { 
    var xmlhttp = ....; // create a new request here 

    xmlhttp.open("GET", url, true); // for async 
    xmlhttp.onreadystatechange=function() {  
     if (xmlhttp.readyState==4) { 
      if (xmlhttp.status == 200) { 

       // pass the response to the callback function 
       callback(null, xmlhttp.responseText); 

      } else { 
       // pass the error to the callback function 
       callback(xmlhttp.statusText); 
      } 
     } 
    } 
    xmlhttp.send(null); 
} 

Ensuite, vous pouvez appeler cette méthode comme ça ...

doRequest('http://mysite.com/foo', function(err, response) { // pass an anonymous function 
    if (err) { 
     return ""; 

    } else { 
     return response; 
    } 
}); 

Cela devrait renvoyer le responseText avec précision. Faites-moi savoir si cela ne vous rend pas les bons résultats.

+0

Merci! Cela m'empêche d'avoir à répéter des configurations complètes de requêtes chaque fois que je veux en effectuer une. –

+0

@DissidentRage - Content de l'entendre. –