Я пытаюсь использовать 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
. Это связано с тем, что сигнатура метода обратного вызова :
обратный вызов (данные, textStatus) Функция обратного вызова , которая выполняется, если запрос завершается успешно.
Как передать 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)
});
Деформация функции, например
function getResults(locationType) {
$.getJSON(url, null, function(results) {
searchResults(results, locationType)
});
}
Но в вашей конкретной ситуации вам даже не нужно его передавать, вы можете получить доступ к значению непосредственно в обратном вызове.
Вы можете использовать метод .ajax :
var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$.ajax({
url: url,
context: { lt: locationType },
success: function(results) {
searchResults(results, this.lt);
}
});
Если вы хотите использовать locationType
(значение которого 3
) в обратном вызове, просто используйте
function(results) { .....
благодаря ] closures , locationType
будут автоматически доступны в обратном вызове.