スポンサードリンク

2008年07月27日

Ajaxの非同期通信がうまくできないことについて

【講座名】
Ajax初心者入門講座楽天ウェブサービス初心者入門講座 に関する質問

【質問】
Ajax初心者入門講座の「Step13・非同期通信」と、楽天ウェブサービス初心者入門講座の「Step9・楽天から商品データを取得する」のいずれも非同期通信を使って、データを取得してみましたがうまくいきません。

Ajaxのほうは、Step13でpref.htmlはきちんと表示されますが、「データ取得」ボタンをクリックしても何も変化がおこりません。

これはファイル名pref.jsに問題があるのでしょうか?

楽天ウェブサービス初心者入門講座の方は、index.html、index.js、item.js、index.css、をきちんと決められたファイル先に保存しているのに、何も表示されません。

http://localhost/ はきちんと動くので、Webサーバーに問題はないと思います。ファイルの保存形式も UTF-8でしています。

何が原因なのでしょうか?お手数ですがよろしくお願いします。


【回答】
非同期通信ができないとのことなので、多分原因は同じです。

まず「Ajax初心者入門講座」のほうから解決しましょう。「楽天ウェブサービス初心者入門講座」は、同じ手順で解決できると思います。

少し長くなりますが、原因が特定できれば、すべて行なう必要はありません。


(1)Webブラウザ側の設定を確認します。

Webブラウザで以下のURLを開き、動作を試してください。
http://ws.bzen.net/pgtop/sample003/pref.html

上記のプログラムは sample003 をレンタルサーバーにアップロードしただけです。もしこのURLで動くなら、ブラウザ側の設定の問題ではありません。

*動かないなら、ブラウザかセキュリティソフト側で、JavaScriptがブロックされている可能性があります。


(2)次は「prototype.js」の配置場所が正しいか、もう一度確認してください。

C:\phpdev\www\ajax\lib フォルダの中に配置します。
*「\」はWindowsでは円記号のことです。

つまり以下のようなパスになります。
C:\phpdev\www\ajax\lib\prototype.js

「Step12・localhostのファイルを表示」で、

---引用---
これまでCドライブの直下にあった ajaxフォルダ を、「C:\phpdev\www」にフォルダごと移動します。
------

という操作を行なっていれば、prototype.jsが正しく配置されていると思います。


(3)「phpdev」でローカルのWebサーバーを起動し、「pref.xml」が正しく表示されるか確認してください。
http://localhost/ajax/sample003/pref.xml

XMLデータが表示されないと、もちろんプログラムで取得できません。


(4)それでも動かない場合は、どこでプログラムが動かなくなるか特定します。

プログラムに以下の1文を加えます。
alert("OK");



var response = data.responseXML.getElementsByTagName('Response');
alert("OK"); ←こんな使い方
var item = response[0].getElementsByTagName('Item');


アラートを書く場所を少しずつ変えます。アラートが表示されなくなった直前のプログラムに問題がある可能性が高いです。

キャッシュを表示しないためには、"OK2"のようにアラートで表示する文字列を毎回変えたほうが確実です。

ここで動かないのは、プログラムの入力ミスなどによるものです。問題箇所を特定できれば、修正するだけです。


(5)あとは文字コードですが、これは UTF-8 にしているとのことなので大丈夫だと思います。

とりあえず以上のことを、順番に試してみてください。一番可能性が高いのは、「prototype.js」の配置場所です。


関連する記事もご覧ください。
Ajax非同期通信のサンプルで、IEだと正常に動作しないことについて。

posted by プログラミング入門 at 23:14| Ajax | このブログの読者になる | 更新情報をチェックする

2008年07月23日

Ajax readfile関数とセキュリティについて

【講座名】
Ajax初心者入門講座 に関する質問

【質問】
はじめまして、いつも拝見させて頂いております。

今回 Ajax の講座のRSSサンプルを利用させて頂き、ホームページにブログの見出しをリンク付で読み込ませていた所、レンタルサーバーに上げていたのですが、セキュリティ的に問題があるかもしれないとのことで、RSSを表示するPHPファイルが読み込めなくなってしまっています。

エラーメッセージ
-------------------------------------------------------
file-access is disabled in the server configuration in
-------------------------------------------------------

最初の数日間は読み込めていましたので、おそらくサーバーの設定を変えられたのではと思います。

ローカルでは問題なく動いています。

何か解決方法などご存知でしたら教えて頂きたいです。宜しくお願い致します。


【回答】
PHPはバージョンによって、使える関数が異なります。またWebサーバーの管理者が自由に設定できます。

レンタルサーバーの場合は、ユーザーが設定を変えることができないので、似たような機能の関数を使ってみてください。

readfile関数をPHPマニュアルで調べると、「参考」という項目があります。これが関連する関数です。

http://www.php.net/manual/ja/function.readfile.php

すると file_get_contents という関数が、代わりに使えそうだとわかります。

readfile()

file_get_contents(ここにURL);

詳細はこちら
http://www.php.net/manual/ja/function.file-get-contents.php


***注意点***
(1)file_get_contents関数は、当講座で使用している「phpdev423」のバージョンでは動きませんのでご注意ください。PHPのバージョンの問題です。したがって readfile関数を使っています。

(2)readfile関数や file_get_contents関数は、他のページのデータを扱うため、踏み台にされる危険があるので注意して使ってください。

URLを指定する引数の部分を、第三者が外部から自由に変えられるようなプログラムだと、セキュリティ上問題があるということです。


【ワンポイント】
レンタルサーバーによっては、関連する関数も使えないようになっているかもしれません。ファイルを読み込む方法は、他にもいろいろありますが、一番簡単なのは、使用を許可しているレンタルサーバーに変更することです。

posted by プログラミング入門 at 13:27| Ajax | このブログの読者になる | 更新情報をチェックする

2008年03月21日

Ajax非同期通信のサンプルで、IEだと正常に動作しないことについて。

【講座名】
Ajax初心者入門講座 に関する質問

【質問】
ステップ13の非同期通信のサンプルなのですが、Internet Explorer だと「処理中です」の画面で止まったままになってしまいます。
FireFox であれば正常に動作するのですが、何が原因と考えられるでしょうか?

【回答】
ステップ13のプログラムは sample003 ですね。私のほうで IE6.0 で確認してみたところ、正常に動きました。そこで以下の方法を試してください。

(1)Internet Explorer で以下のURLを開き、試してください。
http://ws.bzen.net/pgtop/sample003/pref.html

上記のプログラムは sample003 をウェブにアップロードしただけですから、もしこのURLで動くなら、ブラウザの問題ではないです。


(2)各ファイルの保存時の文字コードを、もう一度確認してください。
*多くの場合文字コードで解決します。


(3)どこでプログラムが動かなくなるか特定してください。

FireFox では Firebug を使えば、簡単に問題の箇所を特定できますが、Internet Explorer の場合、動作確認するにはコツがあります。プログラムに以下の1文を加えます。

alert("OK");



var response = data.responseXML.getElementsByTagName('Response');
alert("OK");
var item = response[0].getElementsByTagName('Item');


少しずつアラートを書く場所を変えてみてください。アラートが表示されなくなった直前のプログラムに問題がある可能性が高いです。

*実行する度にブラウザのキャッシュはクリアするようにしてください。プログラムを変更したつもりでも、キャッシュを見ていることがあります。

ツール → インターネットオプション → ファイルの削除

アラートで表示する文字列を毎回変えたほうが確実です。するとキャッシュを見ている場合は、すぐに気付きます。

この方法で問題箇所を大体特定することができます。
posted by プログラミング入門 at 15:11| Ajax | このブログの読者になる | 更新情報をチェックする

スポンサードリンク