Как передать параметры в метод обратного вызова jQuery $ .getJSON? - PullRequest
25 голосов
/ 07 августа 2010

Я пытаюсь использовать jQuery для вызова некоторого пользовательского API через Ajax/$.getJSON.

Я пытаюсь передать пользовательское значение в метод обратного вызова Ajax, но это значение не передается и фактически перезаписывается.Это мой код:

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

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

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

Значение locationType ДО того, как я позвоню с помощью AJAX, будет 3.Но после того, как вызов успешно вернул данные, значение для locationType теперь равно success.Это связано с тем, что сигнатура метода обратного вызова :

обратный вызов (data, textStatus) Функция обратного вызова, которая выполняется в случае успешного выполнения запроса.

Как передать один или несколько параметров методу обратного вызова?

Ответы [ 5 ]

19 голосов
/ 07 августа 2010

Вам не нужно передавать его, просто ссылайтесь на переменную, которая у вас уже есть, например:

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

Также нет необходимости передавать null, если у вас нет данныхобъект, это необязательный параметр, и jQuery проверяет, является ли второй параметр функцией или нет, поэтому вы можете просто сделать это:

$.getJSON(url, function(results) {
    searchResults(results, locationType)
});
18 голосов
/ 07 августа 2010

Деформация в функции, например,

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

Но в конкретной ситуации вам даже не нужно передавать ее, вы можете получить доступ к значению непосредственно в обратном вызове.

4 голосов
/ 07 августа 2010

Вы можете использовать метод .ajax :

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$.ajax({
    url: url,
    context: { lt: locationType },
    success: function(results) {
        searchResults(results, this.lt);    
    }
});
2 голосов
/ 07 августа 2010

Если вы хотите использовать locationType (значение которого 3) в обратном вызове, просто используйте

function(results) { .....

благодаря закрытиям , locationType будут автоматически доступны при обратном вызове.

0 голосов
/ 10 июня 2016

Можно попробовать:

function getResults(locationType) {
    $.getJSON(url, {p1:'xxx', p2: 'yyy'}, function(results) {
        searchResults(results, locationType)
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...