jQuery 将参数附加到 url
jQuery append params to url
我喜欢 jQuery 的 $.ajax() 方法允许指定请求的方式 url:
{
url: 'http://domain.com/?param=1',
data{
param2: '2'
}
}
$.ajax() 方法将(可能)在提供的数据上调用 $.param() 并可选择将其附加到提供的 URL.
我的问题是:这种类型的 url 操作在 $.ajax() 调用之外可用吗?
例如,我想打开一个弹出窗口 window,我想用与 $.ajax().[ 相同的方式构造 URL。 =14=]
我已经编写了一个函数来执行此操作,但我感觉我正在重新发明轮子并复制 jQuery:
的现有函数
var prepareUrl = function( url, data )
{
var params = $.param( data );
if ( params.length > 0 )
{
// url contains a query string
if ( url.indexOf( '?' ) > -1 )
{
// get last char of url
var lastChar = url.substr( url.length - 1 );
// Append & to the end of url if required
if ( lastChar != '&' && lastChar != '?' )
{
url += '&';
}
}
else // url doesn't contain a query string
{
url += '?';
}
url += params;
}
return url;
}
谢谢!
param
方法将为您生成一个查询字符串,但您需要删除现有的查询字符串。
var base = "http://example.com/foo/?example=old";
var data = {
foo: "hello",
bar: "world?"
};
var url = base.replace(/\?.*$/, "") + "?" + jQuery.param(data);
alert(url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
You can build query string like this:
getQueryStr = function(obj) {
var str = [];
for (var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
console.log(serialize({
param1: "val1",
param2: "val2"
}));
For recursive :
getQueryStr = function(obj, prefix) {
var str = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p,
v = obj[p];
str.push(typeof v == "object" ?
getQueryStr(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
}
console.log(serialize({
favfruit: "apple",
data: {
name: 'js',
points: [1, 2, 3]
}
}));
是的,您可以使用 jqueries .param()
函数来执行此操作。
var params = { param1:"foo", param2:"bar"};
var str = jQuery.param( params );
alert(str);
由于其他回复没有回答我的问题,我对 $.ajax()
调用进行了一些测试,以查看它如何将 url 与参数数据合并。
到目前为止我的发现:
- 如果 url 包含
?
,则 $.ajax()
将追加 '&'
+ $.param(data)
- 如果没有,则
$.ajax()
将追加 '?'
+ $.param(data)
所以如果我想让我的 url 处理函数与 $.ajax()
的处理方式保持一致,那么它应该像下面这样:
var addParams = function( url, data )
{
if ( ! $.isEmptyObject(data) )
{
url += ( url.indexOf('?') >= 0 ? '&' : '?' ) + $.param(data);
}
return url;
}
我仍然想知道是否有内置的 jQuery 方法可以做到这一点。
如 SO answer, just use URLSearchParams
所述
let urlParams = new URLSearchParams(location.search.substr(1));
urlParams.set(key, value);
其中 key=value
是您要添加的新 url 参数
您可以检查浏览器兼容性here
我喜欢 jQuery 的 $.ajax() 方法允许指定请求的方式 url:
{
url: 'http://domain.com/?param=1',
data{
param2: '2'
}
}
$.ajax() 方法将(可能)在提供的数据上调用 $.param() 并可选择将其附加到提供的 URL.
我的问题是:这种类型的 url 操作在 $.ajax() 调用之外可用吗?
例如,我想打开一个弹出窗口 window,我想用与 $.ajax().[ 相同的方式构造 URL。 =14=]
我已经编写了一个函数来执行此操作,但我感觉我正在重新发明轮子并复制 jQuery:
的现有函数var prepareUrl = function( url, data )
{
var params = $.param( data );
if ( params.length > 0 )
{
// url contains a query string
if ( url.indexOf( '?' ) > -1 )
{
// get last char of url
var lastChar = url.substr( url.length - 1 );
// Append & to the end of url if required
if ( lastChar != '&' && lastChar != '?' )
{
url += '&';
}
}
else // url doesn't contain a query string
{
url += '?';
}
url += params;
}
return url;
}
谢谢!
param
方法将为您生成一个查询字符串,但您需要删除现有的查询字符串。
var base = "http://example.com/foo/?example=old";
var data = {
foo: "hello",
bar: "world?"
};
var url = base.replace(/\?.*$/, "") + "?" + jQuery.param(data);
alert(url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
You can build query string like this:
getQueryStr = function(obj) {
var str = [];
for (var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
console.log(serialize({
param1: "val1",
param2: "val2"
}));
For recursive :
getQueryStr = function(obj, prefix) {
var str = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p,
v = obj[p];
str.push(typeof v == "object" ?
getQueryStr(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
}
console.log(serialize({
favfruit: "apple",
data: {
name: 'js',
points: [1, 2, 3]
}
}));
是的,您可以使用 jqueries .param()
函数来执行此操作。
var params = { param1:"foo", param2:"bar"};
var str = jQuery.param( params );
alert(str);
由于其他回复没有回答我的问题,我对 $.ajax()
调用进行了一些测试,以查看它如何将 url 与参数数据合并。
到目前为止我的发现:
- 如果 url 包含
?
,则$.ajax()
将追加'&'
+$.param(data)
- 如果没有,则
$.ajax()
将追加'?'
+$.param(data)
所以如果我想让我的 url 处理函数与 $.ajax()
的处理方式保持一致,那么它应该像下面这样:
var addParams = function( url, data )
{
if ( ! $.isEmptyObject(data) )
{
url += ( url.indexOf('?') >= 0 ? '&' : '?' ) + $.param(data);
}
return url;
}
我仍然想知道是否有内置的 jQuery 方法可以做到这一点。
如
let urlParams = new URLSearchParams(location.search.substr(1));
urlParams.set(key, value);
其中 key=value
是您要添加的新 url 参数
您可以检查浏览器兼容性here