gpt4 book ai didi

javascript - javascript 的 Jquery 参数替代方案

转载 作者:数据小太阳 更新时间:2023-10-29 04:24:22 24 4
gpt4 key购买 nike

我需要转换以下类型的字典:

{'key1': ['value1'], 'key2': ['value1', 'value2']}

key1=value1&key2=....

即发布数据表单。我在 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() 函数实现了同样的效果。如何在 javascript 中完成同样的操作。

最佳答案

这是一个 mini jquery param API [ fiddle ].

你可以通过jqMini.param(obj);来使用它

如上面的 fiddle 所示,它提供了相同的使用 jquery 的原始 $.param 函数输出。

注意: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));

关于javascript - javascript 的 Jquery 参数替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com