2013-08-11 4 views
0

J'ai besoin de stocker les données renvoyées par un appel .post de $ jquery dans une variable appelée result. le code ci-dessous fonctionne, sauf le premier clic result revient comme indéfini ... sur le second clic renvoie les données du fichier php comme prévu. Merci.

$('a').on('click',function(){ 
    var cv = $(this).data('cv'); 
    var url= '_php/myphp.php'; 
    $.post(url,{contentVar:cv},function(data) 
    { 
    result = data 
    return result;  
    }); 
    alert(result); 
}); 
+0

Vous pouvez simplement remplacer le mot 'data' dans le rappel de' result' plutôt que de l'assigner après le fait. – DevlshOne

+0

double possible de [Comment retourner la réponse d'un appel AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+0

vous pouvez Ne pas retourner les données d'un appel asynchrone comme ça ... il y a probablement une question 1000 avec le même sujet ... la solution est d'utiliser une fonction de rappel pour traiter la valeur renvoyée par ajax comme mentionné chacune de ces questions –

Répondre

1

En utilisant la méthode .done(), vous êtes en attente pour l'appel AJAX pour obtenir une réponse positive avant d'alerter le résultat.

$('a').on('click',function(){ 
    var cv = $(this).data('cv'); 
    var url= '_php/myphp.php'; 
    $.post(url,{contentVar:cv},function(data) { 
    result = data; 
    return result;  
    }).done(function() { 
     alert(result); 
    }); 
}); 
+0

cela fonctionne. <3 jquery. merci DevishOne. – BryanK

1

Vous devez utiliser le résultat comme variable globale.

Variable globale vous permettra d'utiliser la variable en dehors du champ d'application:

var result; 
$(function(){ 
    $('a').on('click',function(){ 
     var cv = $(this).data('cv'); 
     var url= '/echo/json/'; 
     $.post(url,{contentVar:cv},function(data) 
     { 
     result = data; 
     //you don't need any return, its callback function 
     }).done(function(){ 
      alert(result); 
     }); 

    }); 
}); 

Vous pouvez trouver plus d'informations sur: http://snook.ca/archives/javascript/global_variable

+0

Son doesnt importe si c'est asynchrone ou non. la seule chose que l'async affectera quand vous appelez la variable. Si vous l'appelez après l'assemblage, vous obtiendrez la bonne valeur. –

+0

Je pense que tu as manqué quelque chose mec. ce sera. –

+0

Im toujours obtenir indéfini la première fois ... – BryanK

0

Essayez comme,

var result=null;// initially initialize this variable 
$('a').on('click',function(e){ 
    e.preventDefault();// use this line to prevent its default behaviour 
    var cv = $(this).data('cv'); 
    var url= '_php/myphp.php'; 
    $.post(url,{contentVar:cv},function(data) 
    { 
     result = data; 
     alert(result);// first alert 
     return result;  
    }); 
    alert(result);// its global now, check this too 
}); 

Si cela ne correctifs puis utilisez $.ajax() avec l'option async:false. Appelez votre Ajax code synchrone afin que le result variable initialisés et vous obtenez le result après votre Ajax call.

+0

ne fonctionnera toujours pas parce que 'post' est asynchrone –

+0

Vous devez placer l'alerte à l'intérieur du rappel de poste avant le retour –

Questions connexes