Javascript ajax()-是否向POST请求添加查询参数?
要使用jQuery AJAX向url添加查询参数,请执行以下操作:Javascript ajax()-是否向POST请求添加查询参数?,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,要使用jQuery AJAX向url添加查询参数,请执行以下操作: $.ajax({ url: 'www.some.url', method: 'GET', data: { param1: 'val1' } )} 这会产生一个类似于www.some.url?param1=val1 当方法为POST时,如何执行相同的操作?在这种情况下,数据不再作为查询参数追加,而是构成请求的主体 我知道我可以在ajax请求之前手动将参数附加到url,但我有一种烦人的感觉,就是我缺少一
$.ajax({
url: 'www.some.url',
method: 'GET',
data: {
param1: 'val1'
}
)}
这会产生一个类似于www.some.url?param1=val1
当方法为POST时,如何执行相同的操作?在这种情况下,数据
不再作为查询参数追加,而是构成请求的主体
我知道我可以在ajax请求之前手动将参数附加到url,但我有一种烦人的感觉,就是我缺少一些明显的方法来实现这一点,这比ajax调用之前需要执行的~5行要短。允许您将对象的属性序列化为查询字符串,您可以自己将其附加到URL:
$.ajax({
url: 'http://www.example.com?' + $.param({ paramInQuery: 1 }),
method: 'POST',
data: {
paramInBody: 2
}
});
感谢@Ates Goral提供的
jQuery.ajaxPrefilter()
提示。我的问题是我无法更改url
,因为它绑定到kendoGrid
,并且后端web API不支持kendoGrid
的服务器分页选项(即页面
,页面大小
,跳过
和获取
)。此外,后端分页选项必须是不同名称的查询参数。因此,必须在数据中放入一个属性来触发预过滤
var grid = $('#grid').kendoGrid({
// options here...
dataSource: {
transport: {
read: {
url: url,
contentType: 'application/json',
dataType: 'json',
type: httpRequestType,
beforeSend: authentication.beforeSend,
data: function(data) {
// added preFilterMe property
if (httpRequestType === 'POST') {
return {
preFilterMe: true,
parameters: parameters,
page: data.page,
itemsPerPage: data.pageSize,
};
}
return {
page: data.page,
itemsPerPage: data.pageSize,
};
},
},
},
},
});
如您所见,transport.read
选项与jQuery.ajax()的选项相同。在预滤波位中:
$.ajaxPrefilter(function(options, originalOptions, xhr) {
// only mess with POST request as GET requests automatically
// put the data as query parameters
if (originalOptions.type === 'POST' && originalOptions.data.preFilterMe) {
options.url = options.url + '?page=' + originalOptions.data.page
+ '&itemsPerPage=' + originalOptions.data.itemsPerPage;
if (originalOptions.data.parameters.length > 0) {
options.data = JSON.stringify(originalOptions.data.parameters);
}
}
});
很好的一点,正如被问到的,它几乎是重复的,但我在写问题时犯了一个错误——我真正应该问的不是“当contentType是application/json时”,而是“当方法是POST时”。我会更新这个问题。如果基本url没有参数,这是一个不可靠的解决方案,那么这个问题就可以解决。当然,我可以使用$.param()
创建查询字符串,然后执行类似url+=(url.match(/\?/)?'&':'?')+queryString的操作
可以安全地附加查询字符串,但这会成为一个可怕的单行代码,或者在实际调用ajax之前,我必须准备好url。这当然是有效的,但并不理想。如果有人没有更好的建议,我会接受。您可以介绍自己的属性,query
,并将其作为选项包含在您的$.post()
调用中。然后编写一个脚本,在幕后进行令人讨厌的查询字符串操作,而不使用代码的其余部分。自定义参数+预过滤器对我来说似乎是最整洁的。@fildred13请发布您的解决方案好吗?我有同样的情况:向$.post.添加GET参数
,但URL有时已经有GET参数,有时没有,因此URL:getMyUrl+'?'+$.param({paramInQuery:1}),
在任何情况下都不起作用。