[英]jQuery: Get request (GET/POST) parameters from ajax request in Javascript
[英]jQuery .ajax() - add query parameters to POST request?
要使用 jQuery AJAX 向 url 添加查询参数,请执行以下操作:
$.ajax({
url: 'www.some.url',
method: 'GET',
data: {
param1: 'val1'
}
)}
这会导致像www.some.url?param1=val1
这样的 url
当方法是 POST 时,我如何做同样的事情? 在这种情况下, data
不再作为查询参数附加 - 而是构成请求的正文。
我知道我可以在 ajax 请求之前手动将参数附加到 url,但我只是有一种唠叨的感觉,我错过了一些明显的方法来做到这一点,它比我需要执行的 ~5 行短在ajax调用之前。
jQuery.param()允许您将对象的属性序列化为查询字符串,您可以自己将其附加到 URL:
$.ajax({
url: 'http://www.example.com?' + $.param({ paramInQuery: 1 }),
method: 'POST',
data: {
paramInBody: 2
}
});
感谢@Ates Goral 提供jQuery.ajaxPrefilter()
技巧。 我的问题是我无法更改url
因为它绑定到kendoGrid
并且后端 Web API 不支持kendoGrid
的服务器分页选项(即page
、 pageSize
、 skip
和take
)。 此外,后端分页选项必须是不同名称的查询参数。 所以不得不在data
放置一个属性来触发预过滤。
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);
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.