Как мне установить автозаполнение JQuery на POST вместо GET? - PullRequest
18 голосов
/ 03 октября 2009

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

Ответы [ 5 ]

51 голосов
/ 01 апреля 2011

Вероятно, лучше передать его с параметром источника, а не устанавливать его глобально, как это:

$("#input").autocomplete({
    source: function (request, response) {
        $.post("/AjaxPostURL", request, response);
    }
});
13 голосов
/ 01 июля 2010

Вы можете использовать

$.ajaxSetup( { type: "post" } );

перед вызовом автозаполнения, и он отменяет вызов ajax на странице.

6 голосов
/ 03 октября 2009

К сожалению, у автозаполнения нет опции, которая позволила бы вам установить это. Однако в коде плагина есть единственное место, где вызывается функция $.ajax. Опция type не указана, что означает, что по умолчанию будет использоваться запрос GET. Вы можете изменить вызов $.ajax (который начинается в строке 361 последней версии), чтобы включить параметр type и установить его значение в "post":

$.ajax({ //line 361
    type: "post",
    ...
1 голос
/ 04 июля 2011

ДЕЙСТВИТЕЛЬНО плохая идея редактировать исходный код, потому что вы потеряете свои изменения при следующем обновлении виджета. Лучше установить глобальный тип «post» или передать объект запроса / ответа.

0 голосов
/ 22 марта 2013

Я переписал эту функцию в нашем файле JavaScript (загруженном после jQuery UI), чтобы он принимал 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 UI напрямую затруднит обновление jQuery UI и не позволит вам использовать API Google для размещения файлов jQuery
- $ .ajaxSetup повлияет на каждый вызов автозаполнения или ajax в нашем продукте
- Написать $ .post и передать его как функцию - это круто, но много печатать, если вы используете десятки автозаполнений на своем сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...