• 締切済み

googlemapAPIとXML-RPC

お世話になります。 「Googleマップ+Ajaxで自分の地図をつくる本」という書籍を読んで勉強しております。 書籍のサンプルコードを実際に動作させてみたところ、動きません。 googlemapオブジェクトのPOSTが正常に動作していないか、もしくはXML-RPCが正常に 動作していないかだと思うのですが解決できません。 お分かりになる方いらっしゃいましたら、ご教授ください。 ■サンプルコードの一部を転記します。 ■javascript function xmlRpc( server, method, params, callbackfunc ) { var xml_param = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml_param += "<methodCall>"; xml_param += "<methodName>" + method + "</methodName>"; xml_param += "<params>"; for( var i=0; i < params.length ; i++ ) { xml_param += "<param>"; xml_param += "<value>" + params[i] + "</value>"; xml_param += "</param>"; } xml_param += "</params>"; xml_param += "</methodCall>"; var req = GXmlHttp.create(); req.open("POST", server , true ); req.onreadystatechange = function() { if(req.readyState == 4 ) { if( callbackfunc != null ) callbackfunc(req.requestXML); } } ★ req.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); req.send(xml_param); ■PHP $request = $HTTP_RAW_POST_DATA; $server = xmlrpc_server_create(); xmlrpc_server_register_method( $server, "addLocation", "addLocation" ); xmlrpc_server_register_method( $server, "deleteLocation", "deleteLocation" ); xmlrpc_server_register_method( $server, "editPlace", "editPlace" ); xmlrpc_server_register_method( $server, "deletePlace", "deletePlace" ); ■補足 javascriptからXML-RPC(PHPに記述)のメソッドを指定し、各種メソッドではDB処理が行われています。 javascript中の★のところまで通っていることをalert()で確認しましたが、PHPは一切通っていない ようです。 ■以下2つの環境で動作確認しております。 (1)自宅マシン ・OS windows XP SP2 ・XAMPP Ver1.7.0インストール ・PEARのXML-RPCはインストール済み (2)レンタルサーバ ・さくらのレンタルサーバ スタンダード ・phpinfo()にてPEARのXML-RPCインストールを確認済み

みんなの回答

回答No.1

気づいたところだけ列挙します。 onreadystatechangeはopenする前にセットしてください。 readyStateプロパティが4でも、statusプロパティが404(FileNotFound)、500(InternalServerError)その他、 何かのエラーになっている可能性もありますので、それもチェックした方がいいと思います。 簡単にするなら、 200(正常終了)、304(NotModified)なら表示を実行、それ以外は何らかのエラーを表示するだけでいいと思います。 headerの上書きについて、私が作ったAjaxライブラリから抜粋、編集したコードです。(最低限のコードに縮めています) IE6、IE7のActiveXObjectを使用した場合のみエラーチェックをかけています (IE7のnative XMLHttpRequestモードではリクエストヘッダのセットでエラーが発生しないようです) // req.overrideMimeType('application/xml'); //PHPでheader('content-type: application/xml')を使用していない場合 if(window.opera || (typeof req.setRequestHeader) =='function'){ req.setRequestHeader('Content-Type', "text/xml; charset=UTF-8"); }else{ // for ActiveXObject try{ req.setRequestHeader('Content-Type', "text/xml; charset=UTF-8"); }catch(e){ } } 未検証です。

mtsttty
質問者

補足

ご助言いただきありがとうございます。 解説いただいた内容を試してみましたが、動作は同じでした。 この内容をもとにもう少し調べてみようかと思います。 また何かお分かりになりましたらよろしくお願いいたします。

関連するQ&A

専門家に質問してみよう