解決済みの質問

データの送受信

var name='太郎';
var age='20';
var post_data;
var target_url='post.asp';
post_data='name='+encodeURIComponent(name)+'&age='+encodeURIComponent(age);
httpObj.open("POST",target_url,,true);
httpObj.send(post_data);

---------------------------------------
このように値を送った場合、post.aspではどうやって値を受け取ればいいのでしょうか?
POSTメソッドで送っているので、Request.Form("name")で受け取れるかと思ったのですがダメでした。
Request.QueryString("name")もダメでした。
コードも説明も足りないかと思いますが、よろしくお願いします。

投稿日時 - 2008-11-10 20:51:42

連想キーワード:

QNo.4468515

困ってます

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

受け取る側は、普通にフォームをPOSTしたのと同じ形で処理できるはず。送信側で、リクエストヘッダーの指定をしたらどうなる?

httpObj.open("POST",target_url,true);
httpObj.setRequestHeader("content-type","application/x-www-form-urlencoded;charset=UTF-8"); // 文字コードは環境に応じて
httpObj.send(post_data);

投稿日時 - 2008-11-11 10:29:10

お礼

httpObj.setRequestHeader("content-type","application/x-​www-form-urlencoded;charset=UTF-8");​ //上記一文のコピー

を、httpObj.sendの上に貼り付けてみましたが変化ありませんでした。

投稿日時 - 2008-11-11 11:35:28

ANo.1

29人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.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">に表示
}
}
}

投稿日時 - 2008-11-11 14:17:05

補足

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

投稿日時 - 2008-11-11 16:42:21

お礼

やろうとしているのはasp.netではなく、aspです。

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

投稿日時 - 2008-11-11 14:32:45

ANo.2

あ。openする前にsetRequestHeaderしておかないとまずいかもしれん。setRequestHeaderを、openの前に書くようにしてもだめだろうか?

ちなみに、そのpost.aspでは、通常のHTMLページのフォームから送信されたデータはちゃんと処理できているのだよね?

投稿日時 - 2008-11-11 12:39:48

お礼

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ではなく何か他の関数を使用するのか、(" ")の中の指定がおかしいとかいう問題でしょうか?

投稿日時 - 2008-11-11 13:06:30

あわせてチェックしたい
  • use encoding 'shiftjis'; の不可解な振る舞い ...
  • name[3] = seq + '0';の意味 ...
  • LWPのPOSTでバイナリが壊れる ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら