Запрос на POST
Я не могу заставить удаленный запрос правильно использовать POST.
var creditors = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value)
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../getCreditors",
replace: function(url, query) {
return url + "#" + query;
},
ajax : {
type: "POST",
data: $.param({q: queryInput.val()})
}
}
});
queryInput.val() не получает текущее значение объекта только значение, которое в момент создания объекта ищейки. Как я могу получить строку запроса в параметрах данных ajax?
Ответы
Ответ 1
Вы можете использовать beforeSend $.ajax
var creditors = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value)
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../getCreditors",
replace: function(url, query) {
return url + "#" + query;
},
ajax : {
beforeSend: function(jqXhr, settings){
settings.data = $.param({q: queryInput.val()})
},
type: "POST"
}
}
});
Ответ 2
Вы можете использовать свойство prepare
с remote
или prefetch
, помните, что подпись функции изменяется.
Пример с prefetch
:
var Bloodhound = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: remote,
prepare: function (settings) {
settings.type = "POST";
settings.contentType = "application/json; charset=UTF-8";
return settings;
},
remote: function (query, settings) {
settings.type = "POST";
settings.data = {q: query, foo: 'bar'}; // you can pass some data if you need to
return settings;
}
}
});
Помните, что при remote
подпись функции изменяется с помощью function(query, settings)
.
Для справки: github.com/twitter/typeahead.js/issues/1236
Ответ 3
Я нашел метод ajax 'beforeSend', о котором говорил холайл, работал лучше всего.
Важно также изменить URL-адрес. В противном случае Typeahead не потрудился сделать другой запрос. Поэтому я просто добавил фиктивный параметр в конце URL-адреса. Как этот
http://mylittleservice.com?blah=%QUERY
Таким образом, когда пакет данных ajax был изменен, мне был предоставлен новый запрос на сервер.