解決済みの質問
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
受け取る側は、普通にフォームを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
29人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(2件中 1~2件目)
あ、そうだな。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
あ。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