web-dev-qa-db-fra.com

Comment puis-je passer des paramètres à une méthode de rappel jQuery $ .getJSON?

J'essaie d'utiliser jQuery pour appeler une API personnalisée via Ajax/$.getJSON

J'essaie de transmettre une valeur personnalisée à la méthode de rappel Ajax, mais cette valeur n'est pas transmise et est en réalité remplacée. Ceci est mon code:

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;

$("#loading_status").show();

$.getJSON(url, null, function(results, locationType) {
    searchResults(results, locationType)
});

La valeur de locationType AVANT que j'appelle l'URL à l'aide de AJAX est 3. Mais une fois que l'appel a renvoyé les données, la valeur de locationType est maintenant success. En effet, la signature de la méthode du callback est:

callback (data, textStatus) Un rappel fonction qui est exécutée si le demande réussit.

Comment puis-je passer 1 ou plusieurs paramètres à une méthode de rappel?

25
Pure.Krome

Vous n'avez pas besoin de le transmettre, il vous suffit de référencer la variable que vous avez déjà, comme ceci:

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$("#loading_status").show();
$.getJSON(url, null, function(results) {
    searchResults(results, locationType)
});

De plus, il n'est pas nécessaire de passer null si vous n'avez pas d'objet de données, il s'agit d'un paramètre facultatif et jQuery vérifie si le deuxième paramètre est une fonction ou non. Vous pouvez donc procéder comme suit:

$.getJSON(url, function(results) {
    searchResults(results, locationType)
});
19
Nick Craver

Warp dans une fonction, par exemple.

function getResults(locationType) {
    $.getJSON(url, null, function(results) {
        searchResults(results, locationType)
    });
}

Mais dans votre situation spécifique, vous n'avez même pas à la transmettre, vous pouvez accéder à la valeur directement dans le rappel.

18
Felix Kling

Vous pouvez utiliser la méthode .ajax :

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$.ajax({
    url: url,
    context: { lt: locationType },
    success: function(results) {
        searchResults(results, this.lt);    
    }
});
4
Darin Dimitrov

Si vous souhaitez utiliser locationType (dont la valeur est 3) dans le rappel, utilisez simplement

function(results) { .....

grâce à les fermetures , locationType seront automatiquement disponibles dans le rappel.

2
Pekka 웃

Pourrait essayer:

function getResults(locationType) {
    $.getJSON(url, {p1:'xxx', p2: 'yyy'}, function(results) {
        searchResults(results, locationType)
    });
}
0
user6450793