Подтвердить что ты не робот

Как установить JQuery Autocomplete в POST вместо GET?

Есть ли способ установить метод отправки JQuery Autocomplete HTTP POST вместо GET?

4b9b3361

Ответ 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 и передача его в качестве функции классная, но много набрав, если вы используете десятки автозаполнений на вашем сайте.