【お題】王手、そして

ご指導よろしくお願いいたします。

現在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モード)
--------------------------------------------

どなたかご指導のほど、よろしくお願いいたします。

A 回答 (2件)

解決策を考えるよりデバッグ方法を簡単にしましょうよ。


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);
に変更してリクエストの疎通を確認しませんか?
    • good
    • 0
この回答へのお礼

haragaさん、ご指導ありがとうございました。

お礼日時:2007/04/29 16:49

#1です間違えました


var xmldoc=xmlReq.responseXML;//rpq->xmlReq
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報