WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:window.openでデータを送る

たかし [WriteDate : Sun Jun 3 22:45:54 2001]

こんにちは。質問です。
window.openのURLにファイルパス等を指定し、同時に変数項を付加してパラメータを同時に送信することができると思うのですが(下記ソース参照)、この変数データが大量にある場合、送信時に”ポインタが無効です”というJSエラーが出ます。window.openを使ってポップアップ画面へ変数を渡す方法としてURLに記述する以外の方法を知っているという方がいましたらその方法を教えてくれませんか。ちなみに、URLの変数はサーブレットとJavaBeanを介してポップアップ画面に引き渡されます。

var url;
url = "BizServlet?cgid=EI006&dia=50";
url = url + "&iprdname=" + iprdname;
url = url + "&PRDID=" + document.Form.PRDIDdocument.Form.iprdname.selectedIndex-1].value;
url = url + "&PRDSUM=" + document.Form.PRDSUM.value;
window.open(url, "winPopUp", "width=350,height=400,screenX=400,screenY=200,scrollbars=yes");


YK [WriteDate : Mon Jun 4 11:34:37 2001]

>url = url + "&PRDID=" + document.Form.PRDIDdocument.Form.iprdname.selectedIndex-1].value;
が、あやしい...。

また、 &は、&の方が、いいかも。


たかし [WriteDate : Mon Jun 4 12:10:11 2001]

YKさんありがとうございます。
YKさんが指摘された箇所は動作確認済みです。


YK [WriteDate : Mon Jun 4 12:35:50 2001]

]がひとつしかなくて、動作しているのですか?


たかし [WriteDate : Mon Jun 4 12:57:34 2001]

すいません
document.Form.PRDID[PRDIDdocument.Form.iprdname.selectedIndex-1].value;
です。貼り付けるときに失敗したようですが、
ソース上ではちゃんと[]で閉じられてます


YK [WriteDate : Mon Jun 4 13:18:57 2001]

ためしに、window.openの直前に、
alert(url)をして、どんな感じか、見てみたいです。


たかし [WriteDate : Mon Jun 4 15:28:58 2001]

こんな感じです
http://localhost:7001/BizServlet?cgid=EI001&lang=1&iUnitType=2&Bcount=6&iPrdId0=1&iPrdId1=2&iPrdId3=4&iDryWet0=1&iFire=HB&iTNH0=123123123123123&iTNL0=1231231231&iTNH1=12312312312312312312&iTNL1=12312312312312312312&iTNH2=12312312312312312312&iTNL2=12312312312312312312&iTNH3=12312312312312312312&iTNL3=12312312312312312312&iTNH4=12312312312312312312&iTNL4=12312312312312312312&iTNH5=12312312312312312312&iTNL5=12312312312312312312&iTNH6=12312312312312312312&iTNL6=12312312312312312312&iTNH7=12312312312312312312&iTNL7=12312312312312312312&iTNH8=12312312312312312312&iTNL8=12312312312312312312&iTNH9=12312312312312312312&iTNL9=12312312312312312312&iTNH10=12312312312312312312&iTNL10=12312312312312312312&iTNH11=12312312312312312312&iTNL11=12312312312312312312&iTNL12=&iTNH12=&iTNL13=123000000000000&iTNH13=123000000000000&iTNH14=12312312312312312312&iTNL14=12312312312312312312&iTNH15=12312312312312312312&iTNL15=12312312312312312312&dia=11&SearchURL=\66\105\122\83\101\114\118\108\101\116\63\99\103\105\100\61\69\73\48\48\49\38\108\97\110\103\61\49\38\105\85\110\105\116\84\121\112\101\61\50\38\66\99\111\117\110\116\61\54\38\105\80\114\100\73\100\48\61\49\38\105\80\114\100\73\100\49\61\50\38\105\80\114\100\73\100\51\61\52\38\105\68\114\121\87\101\116\48\61\49\38\105\70\105\114\101\61\72\66\38\105\84\78\72\48\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\38\105\84\78\76\48\61\49\50\51\49\50\51\49\50\51\49\38\105\84\78\72\49\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\76\49\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\72\50\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\76\50\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\72\51\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\76\51\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\72\52\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\76\52\61\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\51\49\50\38\105\84\78\7
変数の量が少ないときは正常に作動することを確認していますが、上記のように多量のデータを送信しようとすると落ちます。ちなみにURLに該当するのはBizServlet?以降です。


Nobu3 [URL] [WriteDate : Tue Jun 5 11:03:05 2001]

getで送信できる量を超えているからでは?

サーバーに一時的にデータを保存(postで送信が必要?)して、そのファイル名だけを新しいウィンドウに渡すとか?
クッキーを使うとか?
「¥」ってURIに使えたっけ?
「&」よりは「;」の方が安心かも?


たかし [WriteDate : Tue Jun 5 12:04:01 2001]

URLにキーと値を付加して送信する必要があるので、POSTでは送れません。
Nobu3さんが指摘された、
window.open(url,......)を使って、サーバーに一時的にデータを保存する方法、もしくはクッキーを使う方法とはどのようにすればよろしいのでしょうか。
ちなみに¥はユニコード変換に使われておりますが、URLで使用可能です。


Nobu3 [URL] [WriteDate : Tue Jun 5 13:45:23 2001]

>URLにキーと値を付加して送信する必要があるので、POSTでは送れません。
何故?
type=hiddenを使えばできると思う。

<script type="text/javascript">
function hoge(obj){
 window.open('', 'winPopUp', スタイル指定);
 obj.target = 'winPopUp';
 return true;
}
</script>

<form method="post" action="BizServlet" onsubmit="return hoge(this)">
<input type="submit">
<input type="hidden" name="cgid" value="EI006">
(以下略)
</form>

当然ですが、その「BizServlet」とやらが「post」の送信に対応していないと無駄です。
試してないので、コードが動くかどうかより、考え方を理解する努力をしてください。


Nobu3 [URL] [WriteDate : Tue Jun 5 13:57:28 2001]

ちなみに、デフォルトのエンコードタイプ(application/x-www-form-urlencoded)だと「\」は「%5C」になります。
formから送信する時は少し注意しましょう。

忘れてたけど、type=hiddenの中身を変更するのは、例えば
obj['iprdname'].value = iprdname;
でできるはず。当然「iprdname」という名前のinput要素が必要です。
「obj」は先ほどの関数の中では有効です。


style [URL] [WriteDate : Tue Jun 5 14:26:51 2001]

私の知っていることを一言申し上げさせて頂きます。
IE5.0の場合、GETで渡せる文字列は1024バイト
という、「ブラウザの」制限があるようです。
ブラウザからサーバにデータを送信する際に、1024に
切り捨てられてしまうようです。
(NN4.7の場合は上限はわかりませんが、2048バイト
 以上のデータをGETで渡しても遷移先のCGIに正しく
 値が引き渡されました。)

ですので、万が一1024バイトを超えた場合はそれ以後の
データは切り捨てられます。

また、Nobu3さんのおっしゃっておられる内容を理解すれば、
POSTでデータを送信可能です。

それとひとつ気になったのですが・・・・。
「大量のデータを送信すると落ちる」というのは、起動先の
CGIが落ちる(COREを吐く)ということでしょうか?
それならばCOREを見ればいいと思いますし、それ以前に
COREを吐いている場所をログなどで特定すべきだとも思います。

問題解決になるかはわかりませんが、参考までに。。。


たかし [WriteDate : Wed Jun 6 12:09:52 2001]

Nobu3さん、styleさんどうもありがとうございます。
おそらくこの方針でやるのは無理と判断し、新たにロジックを構築しました。活発なご意見どうもありがとうございました。

あと、Nobu3さん、質問です。
window.openを使って、FORMを送信するロジックを示されましたが、実際window.openでFORMは送れるのでしょうか。


Nobu3 [URL] [WriteDate : Wed Jun 6 12:16:33 2001]

考え方はwindow.openで開いたウィンドウをターゲットにしてデータを送信する。です。
window.openでformを送信するのではありません。


たかし [WriteDate : Wed Jun 6 12:31:49 2001]

なるほど!!
了解です。

ほんとにいろいろありがとうございました。
これからも頑張りましょう。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World