配列をurlencodedに変換するjs関数はありますか?私は完全に初心者nJSです...ありがとう!...
私の配列はキーと値の配列です....だから、
myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford');
と同じです
myData['id']='354313';
myData['fname']='Henry';
myData['lname']='Ford';
myData.join('&'); //returns error, it doesn't work on such array...
解決策はありますか?
ああすみません...私はこのような配列を持っています
var myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford');
次に、配列を次のように変換する必要があります。
id=354313&fname=Henry&lname=Ford
あなたはこのようなことをすることができます:
var myData = new Array('id=354313', 'fname=Henry', 'lname=Ford');
var url = myData.join('&');
これを試して:
var myData = {'id': '354313', 'fname':'Henry', 'lname': 'Ford'};
var out = [];
for (var key in myData) {
if (myData.hasOwnProperty(key)) {
out.Push(key + '=' + encodeURIComponent(myData[key]));
}
}
out.join('&');
hasOwnProperty
を使用する理由の説明については、 「JavaScriptオブジェクトをループまたは列挙するにはどうすればよいですか?」に対するこの回答 を参照してください。
JQueryを使用する場合は、$。param()を使用できます。チェック ここ 。使用例
var myData = {'id' : '354313', 'fname' : 'Henry', 'lname' : 'Ford'};
var url = "https://stackoverflow.com?" + $.param(myData);
出力は
https://stackoverflow.com?id=354313&fname=Henry&lname=Ford
オブジェクトの配列でも機能します(fromjQuery(form).serializeArray()):
var myData = [{'id' : '354313'}, {'fname' : 'Henry'},{'lname' : 'Ford'}];
配列の代わりにオブジェクトを使用する場合は、これを行うことができます(ES6):
var myData = {
id: 354313,
fname: 'Henry',
lname: 'Ford',
url: 'https://es.wikipedia.org/wiki/Henry_Ford',
};
encodeDataToURL = (data) => {
return Object
.keys(data)
.map(value => `${value}=${encodeURIComponent(data[value])}`)
.join('&');
}
console.log(encodeDataToURL(myData));
var myObject = {
a: {
one: 1,
two: 2,
three: 3
},
b: [ 1, 2, 3 ]
};
var recursiveEncoded = $.param( myObject );
var recursiveDecoded = decodeURIComponent( $.param( myObject ) );
alert( recursiveEncoded );
alert( recursiveDecoded );
RecursiveEncodedとrecursiveDecodedの値は、次のように警告されます。
a%5Bone%5D = 1&a%5Btwo%5D = 2&a%5Bthree%5D = 3&b%5B%5D = 1&b%5B%5D = 2&b%5B%5D = 3 a [one] = 1&a [two] = 2&a [three ] = 3&b [] = 1&b [] = 2&b [] = 3
関数escapeと nescape を見てください。
配列機能を拡張したい場合は、jgrundsの回答から取得
Array.prototype.toQueryString = function(){
var out = new Array();
for(key in this){
out.Push(key + '=' + encodeURIComponent(this[key]));
}
return out.join('&');
}
または、スタンドアロン機能が必要な場合
function arrayToQueryString(array_in){
var out = new Array();
for(var key in array_in){
out.Push(key + '=' + encodeURIComponent(array_in[key]));
}
return out.join('&');
}