Как получить ответ от xmlhttprequest? (скриншоты)

У меня есть этот код автозаполнения jqueryUI:

.autocomplete({
  source: function( request, response ) {
  var results = $.getJSON( url, {
    term: extractLast( request.term )
  }, response );
  console.log(results);
},...

Журнал console.log для var 'results' выглядит так: введите здесь описание изображения

Мне нужно извлечь поле ответа или responseText, чтобы проверить, является ли оно пустым, и всплывающее сообщение об ошибке без найденных совпадений. Но ничего не работает, чтобы получить это поле:

results.response
results.getResponse()
results.getResponseHeader()

Ни один из этих методов не работает. Спасибо

Оба ответа работают: он правильно возвращает мой ответ. Я могу проверить это... но это сломает автозаполнение. Я все еще изучаю это.

Третий вариант, обратный вызов, обеспечивает наибольшую гибкость и может использоваться для подключения любого источника данных к автозаполнению. Обратный вызов получает два аргумента:

Объект запроса с одним свойством, называемым термином, которое ссылается на значение, которое в данный момент находится в текстовом вводе. Например, когда пользователь ввел новый йо в поле города, термин автозаполнения будет равен новому йо.

Обратный вызов ответа, который ожидает, что один аргумент будет содержать данные, предлагаемые пользователю. Эти данные должны быть отфильтрованы на основе предоставленного термина и могут быть в любом из форматов, описанных выше для простых локальных данных (массив строк или массив объектов с меткой/значением/оба свойства). Это важно при предоставлении пользовательского обратного вызова источника для обработки ошибок во время запроса. Вы должны всегда вызывать обратный вызов ответа, даже если вы столкнулись с ошибкой. Это гарантирует, что виджет всегда имеет правильное состояние.

Это документация автозаполнения пользовательского интерфейса jquery об источнике с помощью функции обратного вызова. Не могу понять, почему новая версия не работает


person user1236048    schedule 19.03.2012    source источник


Ответы (3)


arrow_upward
1
arrow_downward

если вы хотите ответ, который вы, вероятно, хотите сделать

var results = $.getJSON( url, {
    term: extractLast( request.term )
}, function(response) {
    console.log(response);
});
person Manuel van Rijn    schedule 19.03.2012
comment
это работает для тестирования ... но это ломает мое автозаполнение ... теперь нет раскрывающегося списка параметров :( - person user1236048; 19.03.2012
comment
@alex что-нибудь всплывает в консоли? - person Manuel van Rijn; 20.03.2012

arrow_upward
1
arrow_downward

.getJSON является асинхронным и возвращает результат в функции обратного вызова.

Следовательно, измените свой код на что-то вроде этого:

.autocomplete({
    source: function( request, response ) {
        var results = $.getJSON( url, {
            term: extractLast( request.term )
        }, function( results ) {
            console.log( results );
        });
    }, ...
);

Если вам по какой-то причине нужно выполнить синхронный вызов, вы можете вместо этого использовать функцию jQuery .ajax с для параметра async установлено значение false.

person stpe    schedule 19.03.2012

arrow_upward
0
arrow_downward

Вам нужен обратный вызов успеха при выполнении функций jQuery ajax. Вам следует прочитать документацию.

person jbabey    schedule 19.03.2012