- ベストアンサー
リンクをはった時のページ間でのデータの受け渡し
いつも、お世話になっています。 JavaScriptで、分からないことが出ましたのでどなたかよろしくお願いします。 それは、フレーム間でのデータのやり取りでしたら教えていただいたのでが、それとは別に、例えば、親元のページにデータを入力した状態で、リンクをつないで新しく画面が移り変わったときに元のデータ(初めの画面に入力されているデータ)をそのまま新しくリンクされたページに引き継がせれることってできるのでしょうか? リンクをはることですので、新しくブラウザは開かれない(1つのまま)ということでよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
おつかれさまです JavaScriptをつかってデータの受け渡しを行うためにはCookieを使用するほうほうがあります。 具体的には ----送信側htmlに書くJavaScript--- <script language="javascript"> //テキストフィールドの値を取得する function getValue(){ //値を取得する var va1 = MyForm.textField1.value var va2 = MyForm.textField2.value var va3 = MyForm.textField3.value //クッキーに書き込む setCookie("value1", va1); setCookie("value2", va2); setCookie("value3", va3); window.location.href ="../next/nextPage.htm" } //Cookieに書き込む function setCookie(key, val) { var tmp = key + "=" + escape(val) + "; "; tmp += "expires=Fri, 31-Dec-2030 23:59:59; path=/;"; document.cookie = tmp; } </script> ----受信側html(bodyタグでOnLorad()を呼びましょう)-- function OnLorad(){ MyForm2.textField1.value = getCookie("value1"); MyForm2.textField2.value = getCookie("value2"); MyForm2.textField3.value = getCookie("value3"); } function getCookie(key) { var tmp1 = " " + document.cookie + ";"; var xx1 = xx2 = 0; var len = tmp1.length; while (xx1 < len) { xx2 = tmp1.indexOf(";", xx1); tmp2 = tmp1.substring(xx1 + 1, xx2); xx3 = tmp2.indexOf("="); if (tmp2.substring(0, xx3) == key) { return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1))); } xx1 = xx2 + 1; } return(""); } はなはだ簡単ではございますがこれで拾えると思われます
その他の回答 (5)
おつかれさまです、 window.location.href ="../next/nextPage.htm" は画面を私が勝手に作ったnextPage.htmに移動するということなので気にせず決り文句ではありません。 すみませんわかりにくくて… Cookieに書き込むということはそのLocalディレクトリ(Cookieフォルダ)にファイルを作成してそこにセットしたCookieの情報を保存することを意味します。 受け取り側は何も意識せずにgetCookieしてやればよいわけです。 では。
- mishida
- ベストアンサー率34% (19/55)
こんにちは。 すみません。「CF」がなんであるかは知りませんが、サーバーにプログラムをアップできる環境でしょうか。 CGI(またはPHPでもASPでもいいです)を使用できれば、ページ間の値の受け渡しは楽なのですが。
補足
CFとは、COLDFusionといいまして、サーバー側で処理をするものです。 今の環境ですとCGIを使う環境ではないので、どうにかJavaScriptで、できないものかと思っております。何故か締め切ってしまっていますが、下の質問でなにかいい方法がございましたらよろしくお願いします。
- sight
- ベストアンサー率53% (199/370)
失礼ながら便乗?です。申し訳ありません。>obahiro様 HIROYO様> >2.フォームのhiddenフィールドに持ち回った値を格納し、リンクのonClickで該当フォームをSubmitする。 リンク先が静的なHTMLページの場合もJavaScriptか何かでPOSTデータを受け取る ことが可能なのでしょうか?よろしければ補足をお願いします。 ■GETの字数制限 > (全部で半角256文字だったかな?) ほんとに、何文字だったでしょう?たしか、OS依存だったとは思うのですが、Windows でのGET文字列の制限をご存じの方、教えていただけませんか。
- sight
- ベストアンサー率53% (199/370)
私が思いつく限りでは、URLに引数を持たせるのが簡単かな、と思います。 FORMデータのGETでの受け渡しと同様に、 http://www.xxx.jp/linkto.html?name1=data1&name2=data2 とかいう感じでリンクすれば、リンク先のページ内でJavaScriptの location.search で ?以降が拾えるはずです。 ただし、日本語などの2バイト文字を含める場合は、送る前にescape関数などで HTMLエンコードしてあげて、受け取ってからunescape関数でデコードしてあげる 必要があるかと思います。(が、ブラウザによってescape、unescapeはバグや 仕様の食い違いが・・・・。なので、この場合もしかしたらダミーで「見た目 単独ページに見えるフレームページ」を作ってフレーム間でデータやりとりした方が) 楽かも・・・・。 何か、ほかに良い方法がありましたら私も興味がありますのでお願いします。
方法としては2種類。 1.getデータとして引き渡す。 リンクのURLを、***.html?name1=value&name2=value2といったようにくっつけて渡します。 ただし、字数制限があります。 (全部で半角256文字だったかな?) 2.フォームのhiddenフィールドに持ち回った値を格納し、リンクのonClickで該当フォームをSubmitする。 POSTデータになるので、1.と違い字数制限はありません。 フレームを使っている場合は、ターゲット指定(どこのフレームにデータを渡すか)の指定を、キチンと管理してあげる必要があります。 # CFを使ってるんでしたっけ? # そちらを使って良いのであれば、Session変数とか、ク # ライアント変数を使うって言う手もありますよ。
補足
HIROYOさんのご回答を参考とさせていただこうと思いましたが、今の状況ですと難しいです。 それは、まずリンクのはり方にあるのですが、5つ帳票があり、そのうちの一つをラジオボタンで選びボタンを押すことによってリンクをはるようにしています。しかも、リンク先も全てフレームページになっており、困っています。 もしよろしければ、CFのセッション変数・クライアント変数について少し教えていただきたいのですが・・・リファレンスを見ても載っていなく途方にくれてしまっています。よろしくお願いいたします。
補足
早速のご回答ありがとうございます。 いただいたソースを参考に組んではいるのですがエラーで「文が正しくありません」「オブジェクトを指定してください」というのが出てしまいます。 おそらく、リンク先のページがフレームでできているため、きちんと指定されていないのと、リンクが5つあるためだと思います。 そこで、一つお聞きしたいのですが、「window.location.href="../next/nextPage.htm"」 では、フレームの指定方法って言うのは必要なのでしょうか?もしそうでしたらどのようにすればいいのでしょうか? 5つリンクがあるのですが、下につなげて書くだけでよろしいのでしょうか? なにぶん、JavaScriptに携わって2ヶ月で、いまだよく分かりません。 なにとぞ、よろしくお願いいたします。