公開日:2013.05.27

HTTPリクエストとリアルタイムWEB、最近つまずいたこと

テクログ

こんにちは、けーすけです。

 

最初に。
Node.jsがどうとか、そういう話は書いていません。
もっと基本的なところです。
JSでリクエスト送ってサーバで処理するって言うajaxみたいなところです。

 

XMLHttpRequest
非同期なデータの通信を実現するための便利なAPIです。
HTTPリクエストとリアルタイムWEBとか関係するであろうところです。

 

先日、JSのモーダルダイアログで3択のダイアログを作りました。
このモーダルダイアログの入力から処理を分岐して、サーバにコマンドを送る処理です。
コマンドといってもHTTPリクエストにPOSTをくっつけて送るだけのものです。
ローカルで動かしたときはうまくいきましたが、問題は下記です。

 

URLはhttp://cloud.hoge.jp/index.phpです。
モーダルダイアログとか受け取り側のPHPとか書いてませんがご了承ください。

 

//modal.htmlの戻り値は1,2,3のいずれかです。
window.onload = function(){ var action = showModalDialog("http://hoge.jp/modal.html",window,"dialogWidth:300px;dialogHeight:200px");
if(action==1){
function_hoge(action);
・・・(中略)・・・
alert("hoge1");
} else if(action==2){
function_hoge(action);
var xhr= new XMLHttpRequest();
xhr.open("POST","http://sub.hoge.jp/modal_cmd.php",TRUE);
str_post = "hoge1="+action+"&hoge2="+str_msg;
xhr.send(str_post);
alert("hoge2");
} else {
alert("hoge3");
}
}

この場合、必ずalert(“hoge3”);が表示されます。

 

オリジンがそれぞれ違う点が問題となります。
http://cloud.hoge.jp/index.php
http://hoge.jp/modal.html
http://sub.hoge.jp/modal_cmd.php

 

http://sub.hoge.jp/modal_cmd.phpにポストでhoge1hoge2という値を送ると何かしてくれるプログラムです。
cloudもsubもhoge.jpのサブドメインだから大丈夫だろうという考えの元でやっていました。
1.モーダルダイアログは表示できますが、戻り値は取れません。
2.xhr.send(str_post);はできません。

 

よって、同一ドメインのローカルだと問題なく動作して、複数ドメインをまたいだ検証環境だと動作しないということでした。

この記事を書いた人

core-corp

入社年2010年

出身地東京都

業務内容インフラ

特技または趣味ドライブ

core-corpの記事一覧へ

テクログに関する記事一覧