search.jspというページがあります。ユーザーがレコードを選択して編集ボタンを押すと、レコードデータ(jsonオブジェクトに保存されて新しいページに渡される)を含む新しいページ(同じウィンドウ内)を開きたいと思います。Javascript(またはjQuery)を使用して新しいページを開き、JSONデータを渡すにはどうすればよいですか?
7 に答える
2 つのページが同じドメインにある場合、3 番目の方法は HTML5 localStorage を使用することです: http://diveintohtml5.info/storage.html
実際、 localStorage はまさにあなたが望むものを意図しています。GET パラメーターまたはウィンドウ/ドキュメント JS 参照の処理は移植性が高くありません (すべてのブラウザーが localStorage をサポートしていない場合でも)。
json値を保持する非表示/テキスト入力値を使用して「オンザフライ」フォームを作成し、JavaScriptを介してこのフォームを送信できます。
このようなもの...
JQUERY AND UNDERSCOREを使用しています(テンプレートの目的で)
これがテンプレートです
<form method='<%= method %>' action="<%= action %>" name="<%= name %>" id="<%= id %>" target="_blank">
<input type='hidden' name='json' id='<%= valueId %>' />
</form>
その後、JavaScriptで使用を投稿できます
function makePost(){
var _t = _.template("use the template here");
var o = {
method : "POST",
action :"someurl.php",
name : "_virtual_form",
id : "_virtual_form_id",
valueId : "_virtual_value"
}
var form = _t(o); //cast the object on the template
//you can append the form into a element or do it in memory
$(".warp").append(form);
//stringify you json
$("#_virtual_value").val(JSON.stringify(json));
$("#_virtual_form_id").submit();
$("#_virtual_form_id").remove();
}
これで、jsonの長さや送信する変数の数について心配する必要はありません。
一番!
うーん、たとえば、オブジェクトがあります
var dataObject = {
param : 'param',
param2 : 'param2'
};
JSON.stringify メソッドを使用して、文字列に変換できます
var dataObjectString = JSON.stringify(dataObject);
次に、Base64 エンコーディングを使用してデータをエンコードする必要があります (base64 エンコード/デコード メソッドは、検索エンジンで簡単に見つけることができます)。
var dataObjectBase64 = base64encode(dataObjectString);
あなたはこのようなものを得るでしょう
e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307
次に、この文字列をパラメーターとして渡すことができます。
iframe src="http://page.com/?data=e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307"
最後に、ロードされたページのアクションを逆にします。
2 つのページが同じドメインにあると仮定すると、window.open() によって作成された返されたオブジェクトを使用して、新しく開いたウィンドウのウィンドウ オブジェクトにアクセス (および編集) できます。
JSON が十分に小さい場合は、新しいウィンドウを開くときに URL への GET パラメータとして含めることができます。
何かのようなもの:
window.open(yourUrl + '?json=' + serializedJson)