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