有没有办法将Jquery的自动完成HTTP提交方法设置为POST而不是GET?
答案 0 :(得分:51)
使用source参数传递它可能更好,而不是像下面那样全局设置:
$("#input").autocomplete({
source: function (request, response) {
$.post("/AjaxPostURL", request, response);
}
});
答案 1 :(得分:13)
您可以使用
$.ajaxSetup( { type: "post" } );
在调用自动完成之前,它将覆盖页面上的ajax调用。
答案 2 :(得分:6)
不幸的是,自动完成程序没有选项可以让你设置它。但是,插件代码中有一个位置,其中调用了$.ajax
函数。没有指定type
选项,这意味着它将默认为GET请求。您可以修改$.ajax
调用(从最新版本的第361行开始)以包含type
选项并将其值设置为“post”:
$.ajax({ //line 361
type: "post",
...
答案 3 :(得分:1)
编辑源代码是一个非常糟糕的主意,因为您将在下一次升级窗口小部件时丢失更改。最好将全局类型设置为“post”或传入请求/响应对象。
答案 4 :(得分:-1)
我在我们的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升级变得困难,并阻止您使用Google API来托管您的jQuery文件
- $ .ajaxSetup会影响我们产品的每个自动完成或ajax调用
- 写一个$ .post并将其作为一个函数传递很酷,但是如果你在你的网站上使用了几十个自动填充程序,那就很多打字。