2

これは、ajax リクエストで送信するための JavaScript オブジェクトをシリアル化するために作成した関数とヘルパーです。おそらくjQueryライブラリのどこかに、より効率的なソリューションがある可能性がありますが、私はそれを見つけることができません. JavaScript オブジェクト用のものではありません。

/*
@author Benjamin Yep
@important - THIS FUNCTION ASSUMES INPUT ENCODED ACCORDING RFC 3986 see here: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent
@param data - Any javascript object or array.
@param pName - The name of the object to be sent in your ajax request.
@return A serialized JSON-encoded object, ready to send in a request.
Usage:
var someObject={
"foo":"bar",
"bars":["foo","bar"],
"object":{
    "foo":1,
    "bar":2",
},
};
var r=makeHttpObject();//new ajax object
r.open("get","example.php",false);
r.send(paramify(someObject,"varname"));
//In example.php
<?php
echo var_dump($_POST['varname']);
?>
//back in the javascript file
console.log(r.responseText);//shows the contents of the object you sent to the server
*/
function paramify(data,pName){
return constructObject(data,pName).substr(1);
}
function constructObject(data,path){
var contents="";
for(var key in data){
    var curpath=path+"["+key+"]";
    if(Object.prototype.toString.call(data[key])==='[object Object]'||data[key] instanceof Array){
        if(!(data[key] instanceof Array)||data[key].length!=0){
            if(JSON.stringify(data[key])=="{}"){
                contents+="&"+curpath+"={}";
            }else{
                contents+=constructObject(data[key],curpath);
            }
        }else{
            contents+="&"+curpath+"=[]";
        }
    }
    else{
        contents+="&"+curpath+"="+data[key];
    }
}
return contents;
}
4

2 に答える 2

1

効率性に関する限り、この種の関数にできる改善はそれほど多くありません。

ただし、関数内でオブジェクトと配列を同じように扱うことができるはずです。ループはfor...in数字キーで問題なく動作します。

また、出力に入るすべてを必ずエンコードしてくださいencodeURIComponent()

于 2013-03-15T23:15:48.213 に答える
-1

このプラグインを見てください

jquery json

このプラグインは、4 つの新しいメソッドを (ルート) jQuery オブジェクトに公開します。

toJSON: JavaScript オブジェクト、数値、文字列、または配列を JSON にシリアル化します。

evalJSON: JSON から Javascript にすばやく簡単に変換できます。

secureEvalJSON: JSON から Javascript に変換しますが、ソースが実際に JSON であるかどうかを確認しながら変換し、他の Javascript ステートメントがスローされた場合は変換しません。

quoteString: 文字列を引用符で囲み、引用符、バックスラッシュ、または制御文字をインテリジェントにエスケープします。

于 2013-03-15T22:55:39.887 に答える