Как получить ответ от 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)


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

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

.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

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

person jbabey    schedule 19.03.2012