Подтвердить что ты не робот

Как передать параметры методу обратного вызова jQuery $.getJSON?

Я пытаюсь использовать 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 ПЕРЕД ЯЙком URL, использующим AJAX, составляет 3. Но после того, как вызов возвращает данные успешно, значение locationType теперь success. Это связано с тем, что подпись метода обратного вызова:

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

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

4b9b3361

Ответ 1

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

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)
});

Ответ 2

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

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

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

Ответ 3

Вы можете использовать метод .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

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

function(results) { .....

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

Ответ 5

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

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