2

多くのオンライン チュートリアルで、単純な Ajax ソース コードの例を見てきました。私が知りたいのは、例のソース コードを使用しても問題ないかどうかです。

実際のアプリケーションに入るコードに追加するものはありますか?

アプリケーションの堅牢性と安全性を高めるには、どのような手順を踏む必要がありますか?

Web から入手したサンプル ソース コードを次に示します。

function getChats() {
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null) {
            return;
    } 
    var url="getchat.php?latest="+latest;   
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
} 

function GetXmlHttpObject() {
    var xmlHttp=null;
    try {
            xmlHttp=new XMLHttpRequest();
    } catch (e) {
            try {
                    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
    }
    return xmlHttp;
}
4

3 に答える 3

3

投稿したコードには、重要な要素の1つであるstateChanged関数がありません。

自分で投稿したコードを完全に理解していない場合は、getchats.phpの呼び出しが完了すると、関数「stateChanged」が呼び出され、その関数が応答の処理を担当します。呼び出しているスクリプトと関数自体の前に「gets」が付いているので、応答はあなたが興味を持っているものであると確信しています。

それはさておき、投稿したコードを改善する方法はいくつかあります。単一の「xmlHttp」オブジェクトを宣言し、それをすべての関数で使用できるようにすることで機能すると思います(そうでない場合、stateChanged関数は応答を取得する方法がないため)。これは、最後のリクエスト(または最後のいくつか)がまだ応答する前にAJAXリクエストを実行するまでは問題ありません。その場合、オブジェクト参照は毎回最新のリクエストに上書きされます。

また、その価値のあるAJAXコードは、成功と失敗(サーバーエラー、ページが見つからないなど)の場合の機能を提供するため、適切なメッセージをユーザーに配信できます。

WebサイトでAJAX機能を使用したいだけの場合は、jQueryまたは同様の フレームワークの方向を示します。

しかし、実際にテクノロジーと舞台裏で何が起こっているのかを理解したいのであれば、私はあなたがしていることを続け、あなたが自分で小さな軽量のAJAXクラスを構築しようとするときに特定の質問をします。これが私がそれを行った方法であり、今日はjQueryフレームワークを使用していますが、それが舞台裏でどのように機能するかを知ってうれしいです。

于 2008-09-04T12:32:23.747 に答える
0

私はDOMAssistantのようなフレームワークを使用します。これは、すでにあなたのために大変な作業を行っており、より堅牢であり、さらに便利な機能を追加します。

それとは別に、あなたのコードはそれが仕事をするように見えます。

于 2008-09-04T11:27:06.167 に答える
0

正直なところ、Ajax で利用できる多くのライブラリの 1 つを使用することをお勧めします。私はプロトタイプを自分で使用しますが、他の人はjQueryを好みます。かなりミニマルなのでプロトタイプが好きです。Prototype Ajaxのチュートリアルで詳しく説明されています。また、エラーを簡単に処理することもできます。

new Ajax.Request('/some_url',
  {
    method:'get',
    onSuccess: function(transport){
      var response = transport.responseText || "no response text";
      alert("Success! \n\n" + response);
    },
    onFailure: function(){ alert('Something went wrong...') }
  });
于 2008-09-04T11:29:29.437 に答える