• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データの送受信)

データの送受信方法と値の受け取り方

このQ&Aのポイント
  • データの送受信にはPOSTメソッドを使用し、値はencodeURIComponentを使用してエンコードする必要があります。
  • 受け取る側では、Request.Formを使用することで値を受け取ることができます。
  • また、Request.QueryStringを使用することもできますが、この場合はURLのクエリパラメータから値を取得することができます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.1

受け取る側は、普通にフォームをPOSTしたのと同じ形で処理できるはず。送信側で、リクエストヘッダーの指定をしたらどうなる? httpObj.open("POST",target_url,true); httpObj.setRequestHeader("content-type","application/x-www-form-urlencoded;charset=UTF-8"); // 文字コードは環境に応じて httpObj.send(post_data);

shaka001
質問者

お礼

httpObj.setRequestHeader("content-type","application/x-​www-form-urlencoded;charset=UTF-8");​ //上記一文のコピー を、httpObj.sendの上に貼り付けてみましたが変化ありませんでした。

その他の回答 (2)

noname#94983
noname#94983
回答No.3

あ、そうだな。setRequestHeaderはopenしてからでいいのか。うろ覚えで書いてすまん。 そうなると、XMLHttpRequestがきちんと機能しているのか、というあたりだろうか。というか、そもそもスクリプトはちゃんと機能しているか、ということになるんだが。 とりあえず、ASP .netじゃないが、ダミーのPHPページを書いて試してみた。以下で、こっちではPOSTで送信して動いてる。 function send(){ msg = "name=" + encodeURIComponent("太郎") + "&age=123"; try { if(window.XMLHttpRequest){ httpObj = new XMLHttpRequest(); } else { if(window.ActiveXObject){ httpObj = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert('エラーです'); return; } } } catch(e) { alert('エラーです'); return; } httpObj.open("POST", target_url, true); httpObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); httpObj.onreadystatechange = endRead; httpObj.send(msg); } function endRead(){ if (httpObj.readyState == 4){ if (httpObj.status == 200){ document.getElementById("msg").innerHTML = httpObj.responseText; // とりあえず<div id="msg">に表示 } } }

shaka001
質問者

お礼

やろうとしているのはasp.netではなく、aspです。 post.asp で response.write "太郎" と直接書いたものを送信側で受け取ることはできています。ということは、XMLHttpRequest はちゃんと働いているということだと思います。 おそらく、aspでの受け取り方に問題があるのではないかと考えています。

shaka001
質問者

補足

載せていただいた文を単純にコピーして貼り付けていただけだったので、ヘッダーの中の変な場所にスペースが入ってしまいそれでうまくいかなかったようです。 スペースを消したら、うまくいきました。 ありがとうございました。

noname#94983
noname#94983
回答No.2

あ。openする前にsetRequestHeaderしておかないとまずいかもしれん。setRequestHeaderを、openの前に書くようにしてもだめだろうか? ちなみに、そのpost.aspでは、通常のHTMLページのフォームから送信されたデータはちゃんと処理できているのだよね?

shaka001
質問者

お礼

httpObj = new XMLHttpRequest(); と httpObj.open の間に移動したところ、firebugで [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.setRequestHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: というエラーが出てしまいました。 <form method="post" action="post.asp"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" value="送信"> </form> といったフォーム送信では、Request.Form("name")で値を取得できました。 Request.Formではなく何か他の関数を使用するのか、(" ")の中の指定がおかしいとかいう問題でしょうか?

関連するQ&A