5 votes

Comment lier une variable à une requête ajax jquery?

C'est assez explicite:

while (...) {
    var string='quelque chose qui change pour chaque demande ajax.';
    $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
    // obtenir la chaîne ici d'une manière ou d'une autre.
}

Comme vous pouvez le voir, j'ai besoin de récupérer string dans processData d'une manière ou d'une autre. Je ne peux pas utiliser de variable globale car string est différent pour chaque demande ajax. Donc, la question est, comment lier string à ma demande ajax afin que je puisse y accéder depuis processData?

Je ne veux vraiment pas devoir ajouter string à la requête et la faire renvoyer par le serveur, mais si c'est ma seule option, je n'ai pas le choix.

Merci d'avance.

7voto

Fabrizio Calderan Points 43398

Essaie de cette manière :

while (...) {

    var str = 'quelque chose qui change pour chaque requête ajax.';

    (function(_str) {
        $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'})
         .done(function(data) {
            processData(data, _str);
         });
    }(str));
}

function processData(data, str) {
  console.log(data, str);
}

et aucune variable globale n'a été utilisée :)

2voto

Florian Margaine Points 16927
var string='quelque chose qui change pour chaque requête ajax.';
// Utiliser une fermeture pour s'assurer que la valeur de la chaîne est la bonne.
(function() {
    // Stocker le contexte "string"
    var that = this;
    $.ajax({
        'type': 'GET',
        'dataType': 'json',
        'url': 'get_data.php'
    }).done(
        $.proxy( processData, that )
    );
}(string));

function processData( data ) {
    this.string === 'quelque chose qui change pour chaque requête ajax.' // true
}

$.proxy est la version jQuery (multi-navigateur) de .bind().

Vous pourriez ajouter un argument comme l'a suggéré @Joel (dans sa réponse supprimée), mais le moins d'arguments, le mieux.

0voto

user3007439 Points 37
$(document).bind("ajaxSend",function(){
    $("#ajax_preloader").show();
}).bind("ajaxComplete",function(){
    $("#ajax_preloader").hide();
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X