Jquery参数替代javascript
Jquery param alternative for javascript
我需要转换以下类型字典:
{'key1': ['value1'], 'key2': ['value1', 'value2']}
到key1=value1&key2=....
。Post数据表单。我在chrome扩展中这样做,上面的formdata字典由:
返回:chrome.webRequest.onBeforeRequest.addListener(function(details) {
if(details.method=="POST") // ajax call
{
message.postdata = details.requestBody.formData;
}
return {requestHeaders: details.requestHeaders};
}, {urls: ["<all_urls>"],types: ["main_frame", "sub_frame"]}, ["blocking", "requestBody"]);
我记得使用JQuery $.params()函数实现了相同的功能。
这是一个迷你的jquery参数API [fiddle].
您可以通过jqMini.param(obj);
如上面所示,它提供了相同的功能输出jquery的原始$。参数的函数。
注意:jqMini。Param不处理传统的jquery对象作为参数。
(function(w) {
var app = {},
class2type = {},
toString = class2type.toString,
r20 = /%20/g,
rbracket = /'[']$/;
w.jqMini = app;
app.type = function(obj) {
if ( obj == null ) {
return obj + "";
}
// Support: Android < 4.0, iOS < 6 (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call(obj) ] || "object" :
typeof obj;
};
app.isFunction = function(obj) {
return app.type(obj) === "function";
};
app.buildParams = function(prefix, obj, add) {
var name, key, value;
if(Array.isArray(obj)) {
for(var key in obj) {
value = obj[key]
if(rbracket.test(prefix))
add(prefix, value);
else
app.buildParams(prefix + "[" + (typeof value === "object"? key: "") + "]", value, add );
}
} else if(app.type(obj) === 'object') {
for(name in obj)
app.buildParams(prefix + "[" + name + "]", obj[name], add);
} else
add(prefix, obj);
};
app.param = function(obj) {
var prefix, key, value
serialized = [],
add = function(key, value) {
value = app.isFunction(value)? value() : (value == null ? "" : value );
serialized[serialized.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
};
if(Array.isArray(obj)) {
for(key in obj) {
value = obj[key];
add(key, value);
}
} else {
for(prefix in obj)
app.buildParams(prefix, obj[prefix], add);
}
return serialized.join('&').replace(r20, '+');
};
})(window);
var obj = {'key1': ['value1'], 'key2': ['value1', 'value2']};
console.log(jqMini.param(obj));
function queryParams(source) {
var array = [];
for(var key in source) {
array.push(encodeURIComponent(key) + "=" + encodeURIComponent(source[key]));
}
return array.join("&");
}
对于使用AngularJS的人,您可能需要查看$httpParamSerializerJQLike
这就是我想到的-它具有与jQuery参数相同的数组处理。
var queryParam = function( ary ) {
return Object.keys( ary ).map( function( key ) {
if ( Array.isArray( ary[key] ) ) {
var arrayParts = [];
for ( var i = 0; i< ary[key].length; i++ ) {
arrayParts.push( encodeURIComponent( key + '[]' ) + '=' + encodeURIComponent( ary[key][i] ) );
}
return arrayParts.join( '&' );
}
return encodeURIComponent( key ) + '=' + encodeURIComponent( ary[key] );
}).join('&');
};
试试这个:
const data = {'key1': ['value1'], 'key2': ['value1', 'value2']};
const p = new URLSearchParams();
Object.keys(data).map((k) => data[k].map((v) => p.append(k+"[]",v)));
console.log(p.toString());
输出:key1 % 5 b % 5 d = value1& key2 % 5 b % 5 d = value1& key2 % 5 b % 5 d = value2
相关文章:
- 用于回调的javascript参数
- 我不能使用变量作为javascript参数
- Ajax.ActionLink-传递javascript参数
- 需要Javascript参数帮助
- NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0[nsIDOMWind
- JavaScript参数验证
- 变量与表达式作为Javascript参数
- JavaScript参数对象不起作用
- 带有javascript参数的ASPNET MVC RenderAction
- IE JavaScript参数和填充输入字段
- 传递Javascript参数并分配给变量
- Jquery函数中提供Javascript参数
- 使用Play动态更改Javascript参数
- 函数中的 JavaScript 参数
- 本地化字符串中的 JavaScript 参数
- JQuery 函数突然停止工作,转换 Javascript 参数时出错
- JavaScript 参数对象 MDN 指南
- JavaScript 参数未跨处理程序传递
- 即时更改 Javascript 参数
- 附加到 JavaScript 参数中的所有值