2010-08-06 8 views
1

Ok J'ai regardé partout pour cela. Je supprime quelques déclarations de variables, car je peux m'assurer que mon XMLHttpRequest fonctionne.Ajax seulement retourner readyState == 4 valeur

function submit_edit_form() 
{ 
    // id and title are already declared 
    var x = ajax_edit_form_save(id, 'title', title); 
    alert(x); 
} 
function ajax_edit_form_save(id, property, new_value) 
{ 

    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     // screw IE5 & IE6 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.responseText != '') 
     {  
      return xmlhttp.responseText; 
     } 
    } 

    // myURL is already defined. I'm not troubleshooting this part, I know it's working 
    xmlhttp.open("GET", myURL, true); 
    xmlhttp.send(); 
} 

Alors, quand je l'appelle submit_edit_form(), qui appelle ajax_edit_form_save(), je reçois une alerte 'non défini'. Je sais que le problème est que ajax_edit_form_save() renvoie undefined sur readyState 1. Je me gratte la tête parce que je n'ai le retour que lorsque readyState == 4. Comment puis-je attendre la valeur de retour pour que x obtienne le réel responseText?

Répondre

3

Votre fonction retourne avant même la fin de l'appel ajax, car elle est asynchrone. L'instruction return dans votre "onreadystatechange" n'aura aucun effet car la valeur est retournée à l'appelant de la méthode "onreadystatechange" qui est le XMLHttpRequest obejct et non votre code.

Vous devez passer une fonction de rappel à votre ajax_edit_form_save qui est appelée lorsque readystate est 4

Voir ci-dessous:

function ajax_edit_form_save(id, property, new_value, funCallback) // ==> callback function 
{ 

    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     // screw IE5 & IE6 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.responseText != '') 
     {  
      callback(xmlhttp.responseText); // =============> callback function called 
     } 
    } 

    // myURL is already defined. I'm not troubleshooting this part, I know it's working 
    xmlhttp.open("GET", myURL, true); 
    xmlhttp.send(); 
} 

La fonction de rappel pourrait être:

function handleReponse(resp) { 
    // do something with resp 
} 

ajax_edit_form_save("myID", "myProperty", "new value", handleResponse); 
+0

mec Je pense que je t'aime. Je n'ai absolument pas pensé à ça. Je suis sur le point de vérifier et je vais vous donner le chèque. –

+0

ok je peux totalement prendre cela et travailler avec. Je vous remercie! –

+0

@Adam Tootle Vous êtes les bienvenus! – naikus

0

Où avez vous obtenez cela (x) de quel fichier? Je pense, vous avez oublié de mentionner la valeur de l'URL.

+1

ce n'était pas le problème. Je sais que la demande fonctionnait correctement. Je dois juste gérer la valeur de retour. –

Questions connexes