※ ChatGPTを利用し、要約された質問です(原文:AjaxでPHPに通信(変数データ)がうまくいきません。)
AjaxでPHPに通信がうまくいかない理由と解決方法
このQ&Aのポイント
Ajaxを使用してPHPへの通信がうまくいかない問題が発生しています。
ネット上のサンプルを試したがうまくいかない状況です。
問題はサーバーの設定に関係している可能性があります。
AjaxでPHPに通信(変数データ)がうまくいきません。
ご指導よろしくお願いいたします。
現在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/V1/webSearch?';
$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モード)
--------------------------------------------
どなたかご指導のほど、よろしくお願いいたします。
お礼
haragaさん、ご指導ありがとうございました。