Как получить ответ из xmlhttprequest? (скриншоты) - PullRequest
1 голос
/ 19 марта 2012

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

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

Файл console.log для var 'results' выглядит так: enter image description here

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

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 19 марта 2012

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

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

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

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

1 голос
/ 19 марта 2012

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

var results = $.getJSON( url, {
    term: extractLast( request.term )
}, function(response) {
    console.log(response);
});      
0 голосов
/ 19 марта 2012

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

...