ご指導よろしくお願いいたします。
現在Ajaxを勉強中なのですが、
html側のフォームから、PHPへの通信ができていないようなのです。
自分でプログラムのソースを何度も見直したりして、実行したのですが
うまくいきません。
それで、ネット上にあるAjaxのサンプルをいくつか自サーバーで試してみたのですが、やはりうまくいきませんでした。
下記はあるサンプルのソースです。
--------------------------------------------
//yahoo.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Yahoo! ウェブ検索Webサービス</title>
<script language="JavaScript">
//<![CDATA[
// [送信]ボタンをクリック時の処理を定義
function search() {
// 非同期通信を行うためのXMLHttpRequestオブジェクトを生成
try {
xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlReq = new XMLHttpRequest();
}
// サーバーからの応答時の処理を定義(結果をページへ反映)
xmlReq.onreadystatechange = function() {
var msg = document.getElementById("result");
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
var ctt="";
var xmldoc=xmlReq.responseXML.documentElement;
var nodes=xmldoc.childNodes;
if(nodes.length==0){
ctt="お探しのサイトは見つかりませんでした。";
} else {
for (i =0; i < nodes.length; i++) {
var node=nodes.item(i);
ctt += "<li><a target='_blank' href='"
+ getNodeValue(node, "Url")
+ "'>" + getNodeValue(node, "Title")
+ "</a></li>"
}
}
msg.innerHTML=ctt;
} else {
msg.innerHTML="通信に失敗しました。";
}
} else {
msg.innerHTML="通信中…";
}
}
// サーバーとの通信を開始
xmlReq.open("GET","yahoo.php?keyword="
+ encodeURI(document.fm.keyword.value), true);
xmlReq.send(null);
}
// ノードcurrent配下に含まれる要素nameのテキスト値を取得する関数
function getNodeValue(current ,name){
var nodes=current.getElementsByTagName(name);
var node=nodes.item(0);
var txtNode=node.firstChild;
return txtNode.nodeValue;
}
//]]>
</script>
</head>
<body>
<form name="fm">
キーワード:
<input type="text" name="keyword" size="15" maxlength="30" />
<input type="button" value="検索" onClick="search()" />
<hr />
<ol type="1">
<div id="result" />
</ol>
</form>
</body>
</html>
--------------------------------------------
--------------------------------------------
//yahoo.php
<?php
// 出力/内部文字コードをUTF-8に設定
mb_http_output('UTF-8');
mb_internal_encoding('UTF-8');
header('Content-Type: text/xml;charset=UTF-8');
$url ='http://api.search.yahoo.co.jp/WebSearchService/V …
$url.='appid=○○○&query='
.urlencode(mb_convert_encoding($_GET['keyword'],'UTF-8','auto'))
.'&'.'result=15';
print(file_get_contents($url));
?>
--------------------------------------------
上記のhtmlのフォームから文字を入力して実行すると、
"通信中…"
と表示されつづけてしまって、PHP側からのデータが帰ってこないのです。
ちなみに、直接キーワードを含んだパラメーターを渡してあげると、
正常にデータが返って来ます。
他のサンプルも同じような挙動をします。
サーバーの問題なのでしょうか?
ここ2~3日、プログラムとにらめっこしながら、
ネットにて、解決策を模索していたのですが、ちから尽きてしまいました。
--------------------------------------------
//サーバー環境
ハッスルサーバー(さくら系列)
PHP 4.3(CGIモード)
--------------------------------------------
どなたかご指導のほど、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
解決策を考えるよりデバッグ方法を簡単にしましょうよ。
1 //yahoo.php を
<?php
mb_http_output('UTF-8');
mb_internal_encoding('UTF-8');
header('Content-Type: text/xml;charset=UTF-8');
print "<?xml version='1.0' encoding='UTF-8'?>\n";//必要です
print "<kekka>\n";
print "<tes>1番目</tes>\n";
print "<tes>2番目</tes>\n";
print "</kekka>\n";
?>
にして, サーバーとの通信を開始のところを
var xmlurl='http://******/yahoo.php';
xmlReq.open("GET",xmlurl, true);
注:yahoo.phpとyahoo.htmlは同じドメインでなければなりません。(他サイトへリクエストはできません)
open文のxmlurlは予め演算しておいた方が間違いない(経験から)
応答時の処理を定義を
var xmldoc=rpq.responseXML;
var tesitem = xmldoc.documentElement.getElementsByTagName("tes");
alert(tesitem.length);
に変更してリクエストの疎通を確認しませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローカルにあるファイルを検索...
-
IEでF12を押さないとjavascriptが…
-
ジェネレーターの作り方
-
ジャバスクリプトで文字列を変...
-
split できりわけたい
-
AjaxでPHPに通信(変数データ)...
-
google apps scriptの終了のさせ方
-
jQueryのアコーディオンメニュ...
-
【西暦等の変換】
-
google maps api ルート線変更
-
初回訪問(アクセス)日時の取...
-
cgiでポーリングして取得したデ...
-
C#OpenCv V4にのエラーに関する...
-
html javascript リンク先アド...
-
jacascriptでサイトにRSSフィー...
-
Google AJAX Feed APIで、ホー...
-
毎日日付の変わるタイミングを...
-
JsでDateオブジェクトの年月日...
-
翌月を取得するGASが分かりません
-
「続きを読む」ボタンを押すと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
食材の期限を管理するためにGAS...
-
google apps scriptの終了のさせ方
-
このプログラムに、王手をかけ...
-
このプログラムに王様の逃げ道...
-
この将棋プログラムに王様ゲッ...
-
ASP.NETのコントロールの値をJa...
-
ジェネレーターの作り方
-
GASでundefinedエラーが出ます
-
なぜmatchメソッドがエラーにな...
-
ASP.NET MVCでObjectをjsに渡す
-
C#で、ContextMenuStripに動的...
-
html javascript リンク先アド...
-
HTMLで作った時報アプリが動き...
-
翌月を取得するGASが分かりません
-
イラレでナンバリングする方法
-
HTMLにWSHを組み込む
-
gas スプレッドシートがアクテ...
-
getElementByIdでASP.NETのText...
-
APIを使って埋め込んだグーグル...
おすすめ情報