2010-01-20 9 views
0

Je souhaite attribuer une valeur à la variable globale en javascript à partir de la fonction jquery ajax.affecter une valeur à la variable globale en javascript

var trueFalse; 
$.ajax({ 
    type: "GEt", 
    url: "url", 
    data: "text=" + $("#text").val(), 
    success: function(msg) { 
    if(msg.match(/OK/) != null) { 
     trueFalse = "true"; 
    } 
    else { 
     trueFalse = "false";   
    } 
    } 
}); 
return trueFalse; 

ici j'ai besoin de la valeur de trueFalse de la fonction de succès.

grâce v.srinath

+1

Pour quoi avez-vous besoin de trueFalse? Ce serait bien de le savoir comme vous le feriez peut-être mal. – kjagiello

+0

onSubmit = "return validate()" if (trueFalse == true) puis de soumettre sinon existent dans la même page. –

Répondre

3

Si vous ne pouvez vraiment pas changer la logique d'application, alors vous devez créer une demande de paiement ajax « synchrone » (en définissant async:false dans $.ajax options), il attendra jusqu'à ce que le "GET" a été exécuté et seulement ensuite retourner la valeur à l'appelant. Dans le cas contraire, vous devez réécrire le code pour que la fonction de réussite rappelle une fonction de rappel qui lui permet de procéder à tout ce qui doit être fait.

+0

J'ai essayé async: false, mais aussi la page soumet. –

+0

Je n'ai pas vu le code qui appelle ce code, donc je ne peux pas commenter. Appelez-vous cela sur le formulaire de soumission? – naivists

+0

oui, j'ai appelé le code de onsubmit. maintenant tout fonctionne bien. Merci. –

4

Votre code ne fonctionnera pas parce que la ligne return trueFalse; s'exécute avant l'exécution de la fonction de réussite, car elle est appelée comme le résultat d'une requête HTTP asynchrone (comme dans A dans Ajax). Vous devrez passer dans une fonction de rappel à ce code, et invoquer que dans la fonction de succès:

function getWithCallback(val, callback) { 
    var scope = this; 
    $.ajax({ 
     type: "GET", 
     url: "url", 
     data: "text=" + val, 
     success: function(msg) { 
      callback.call(scope, msg.match(/OK/) || false); 
     } 
    }); 
} 

getWithCallback($("#text").val(), function(result) { 
    if (result) { 
     // Do something 
    } 
}); 

Vous pouvez essayer de valider un formulaire soumettre:

var validating = false; 
var valid = false; 

$('#myform').submit(function(event) { 
    if (validating) { 
     return false; 
    } 
    if (valid) { 
     return true; 
    } 
    var form = this; 
    validating = true; 
    getWithCallback($('#text').val(), function(result) { 
     if (result) { 
      valid = true; 
      form.submit(); 
     } 
     validating = false; 
    }); 
    return false; 
}); 

Vous pouvez également pour regarder le jQuery Validation plugin

+0

+1 pour l'élégance. Je pense que le premier argument de la méthode d'appel est la portée de 'this'. 'callback.call (null, msg || false)' – czarchaic

+0

@czarchaic vous avez raison, corrigé de sorte qu'il utilise la portée 'this' de la méthode d'appel (je pense ...) – roryf

0

Puisque vous faites cela sur form.onsubmit, vous ne pouvez pas faire une demande asynchrone. Le navigateur ne saura pas qu'il doit attendre que la requête asynchrone soit terminée. L'avantage d'utiliser async est qu'il ne bloque pas vos scripts/navigateur, mais dans ce cas, c'est réellement ce que vous voulez.

Questions connexes