ページ 11

ajaxでのPOST送信について

Posted: 2011年1月23日(日) 00:38
by Ciel
お世話になります。

先日、http://dixq.net/forum/viewtopic.php?f=51&t=7642のトピックにて、
ajaxでのPOST送信についてアドバイスして頂き、なんとか実装することができました。

ですが、IEでのみ上手くPOST送信ができ、firefoxとchromeでは上手くいかず、データがヌルになってしまっている
ようです。
PHP側でどうデバッグしようか良い方法が思いつかなかったのですが、
とりあえず値をファイルに書き出して調べることにしたところ、IEのみ値が書き込まれ、firefoxとchromeは
nullでした。
当然掲示板にもIEのみ書き込みがされ、firefox,chromeはnullが書き込まれました。
javascriptのみ版とjquery版とを両方作ったのですが、どちらも結果は同じでした。

コードを載せておきます。
方法としては、送信したいデータをURLエンコードし、各name属性の名前と全部くっつけて一つのデータとし、
送信している感じです。
PHP側のコードは貼ってませんが、ただ$_POST['subject']などでアクセスして、データを取り出しているだけです。

firefoxとchromeだけ、何故nullになってしまうのか、
何か考えられる原因として、思い当たるものがあれば教えていただきたいです。
よろしくお願い致します。

コード:

function WriteDataSend(object){
	var name=document.getElementsByName("namae");
	var subject=document.getElementsByName("subject");
	var sentence=document.getElementsByName("sentence");
	
	var namestr=encodeURIComponent(name[0].getAttribute('value'));
	var subjectstr=encodeURIComponent(subject[0].getAttribute('value'));
	var sentencestr=encodeURIComponent(sentence[0].getAttribute('value'));
	
	//文字をURLエンコードしてname属性とくっつける。基本的に(name属性名=値)でよい。
	var alldata="namae="+namestr+"&subject="+subjectstr+"&sentence="+sentencestr;

	$.ajax({
		async : true,
		url : "write.php",
		data : alldata,
		type : "POST",
		contentType : "application/x-www-form-urlencoded; charset=utf-8",
		success : function(msg){
			$(msg).insertAfter(object).css("display","none").show(1000);
		}
	});

Re: ajaxでのPOST送信について

Posted: 2011年1月23日(日) 01:50
by サウス
ブラウザによって動作が異なるのであれば原因はPHPではなくJavascript側にあると思います。

encodeURIComponentというのは見た事ないのですが自作関数ですか?
IEのみしか動作が保障されていないと、firefoxとchromeではnullが返ってきてもおかしくないかもですね。

Re: ajaxでのPOST送信について

Posted: 2011年1月23日(日) 02:38
by Ciel
サウスさん、ありがとうございます。

さっき丁度javascript側を調べてて、原因が分かりました。
最初のgetElementsByNameで対象のname属性のオブジェクトを取得してるんですが、
IE以外では取得できていなかったようです。

jqueryを使って取得し、今はどのブラウザでも動くようになりました。
ご迷惑をおかけしました。

解決はしたんですが、
firefoxとchromeでgetElementsByNameではうまく取得できなかったので、
何か別の方法があると思うのですが、他の方法でオブジェクトが取得できる方法があれば教えて下さい。

回答がなかったら諦めます。

Re: ajaxでのPOST送信について

Posted: 2011年1月23日(日) 05:34
by サウス
参考:http://semooh.jp/jquery/api/selectors/[attribute+value]/

var name=document.getElementsByName("namae");
だと
$("*[name=’namae’]").val()
で取得ですかね。

Re: ajaxでのPOST送信について

Posted: 2011年1月23日(日) 08:42
by Ciel
サウスさん、すいません。

ちょっと書き方が悪かったようです。

今回はサウスさんが書いていただいたjQueryを使った方法で
既に対応済みなのですが、
jQueryを使わない、javascriptのみでの正しいオブジェクトの取得方法を知りたかったんです。
もちろん、firefoxとchromeに対応できる方法で。

どなたかご存知でしたら、回答お願いします><