Есть ли способ установить метод отправки JQuery Autocomplete HTTP POST вместо GET?
Как установить JQuery Autocomplete в POST вместо GET?
Ответ 1
К сожалению, у автозапуска нет опции, которая позволит вам установить это. Тем не менее, есть один место в коде плагина, где вызывается функция $.ajax
. Не указан параметр type
, что означает, что он будет по умолчанию запросом GET. Вы можете изменить вызов $.ajax
(который начинается в строке 361 последней версии), чтобы включить параметр type
и установить его значение в качестве "post":
$.ajax({ //line 361
type: "post",
...
Ответ 2
Вероятно, лучше передать его с исходным параметром, а не устанавливать его глобально следующим образом:
$("#input").autocomplete({
source: function (request, response) {
$.post("/AjaxPostURL", request, response);
}
});
Ответ 3
Вы можете использовать
$.ajaxSetup( { type: "post" } );
перед вызовом автозаполнения, и он переопределит вызов ajax на странице.
Ответ 4
Это ДЕЙСТВИТЕЛЬНО плохая идея отредактировать исходный код, потому что вы потеряете свои изменения при следующем обновлении виджета. Лучше установить глобальный тип "отправить" или передать объект запроса/ответа.
Ответ 5
Я перезаписал эту функцию в нашем файле JavaScript (загружен после пользовательского интерфейса jQuery), чтобы принять GET/POST в качестве другой опции.
$.ui.autocomplete.prototype._initSource = function() {
var array, url,
that = this;
if ( $.isArray(this.options.source) ) {
array = this.options.source;
this.source = function( request, response ) {
response( $.ui.autocomplete.filter( array, request.term ) );
};
} else if ( typeof this.options.source === "string" ) {
url = this.options.source;
/*added*/ var httpMethod = this.options.type ? this.options.type : 'GET';
this.source = function( request, response ) {
if ( that.xhr ) {
that.xhr.abort();
}
that.xhr = $.ajax({
url: url,
data: request,
dataType: "json",
/*added*/ type: httpMethod,
success: function( data ) {
response( data );
},
error: function() {
response( [] );
}
});
};
} else {
this.source = this.options.source;
}
};
Я ДУМАЮ, что он решает проблемы, упомянутые другими людьми выше, не нарушая ничего:
- Редактирование файла пользовательского интерфейса jQuery приведет к сбою обновления jQuery UI и предотвратит использование Google API для размещения ваших файлов jQuery
- $.ajaxSetup повлияет на каждый автозаполнение или вызов ajax через наш продукт
- Написание $.post и передача его в качестве функции классная, но много набрав, если вы используете десятки автозаполнений на вашем сайте.