5

Ajax を実行する小さな JS 関数と、リクエストに POST データを追加する同様の関数があります。Ajax は非常に大きなトピックであり、それに関するライブラリが非常に多いため、機能に欠けているものは何ですか? 安全でないのか、それとも他に心配なことがあるのでしょうか?

function loadPage(pagePath, displayElement)
{
    var xmlHttp;

    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }

    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4)
        {
            document.getElementById(displayElement).innerHTML = xmlHttp.responseText;
        }
    }

    xmlHttp.open("GET", pagePath, true);
    xmlHttp.send(null);
}
4

6 に答える 6

13

独自の Ajax コードを作成しないことを強くお勧めします。代わりに、Prototype、Dojo、またはその他のフレームワークを使用してください。彼らはあなたが処理していないすべての ReadyStates を処理し (2 は送信済みを意味し、3 は処理中であることを意味するなど)、取得している応答をエスケープする必要があります。あなたのページにjavascriptまたは何か。

より堅牢なフレームワークが提供するもう 1 つのことは、innerHTML を使用して DOM 内のアイテムを置き換えるだけでなく、それ以上のことを実行できることです。ここでの関数は、1 つの要素を ajax 呼び出しからの応答に置き換えるためにのみ使用できます。Ajax でできることは他にもたくさんあります。

于 2008-08-29T16:03:11.933 に答える
6

この行を削除します。

alert("Your browser does not support AJAX!")

ユーザーがおそらく理解できない言語で大声で叫ぶことは、失敗よりも悪いことです。:-)

于 2008-08-29T16:03:13.870 に答える
3

私はネストされた try/catch ブロックのファンではなかったので、次のようにします。

var xmlHttp;
if (window.XMLHttpRequest) {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
  try {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
}

if (xmlHttp) {
  // No errors, do whatever you need.
}

うまくいくと思います。しかし、前に述べたように、車輪を再発明する理由はライブラリを使用することです。さらに良いことに、彼らがどのようにそれを行うかを調べてください。

于 2008-08-29T16:51:04.050 に答える
1

プロトタイプで同じこと:

function loadPage(pagePath, displayElement) {
    new Ajax.Updater(displayElement, pagePath);
}

プロトタイプ API の Ajax.Updater

于 2008-09-02T12:31:25.950 に答える
1

jQuery は、おそらく最も軽量で人気のあるライブラリの 1 つです。

于 2008-08-29T16:22:27.927 に答える
0

足りないものを本当に知りたい場合は、jQuery または Prototype の ajax ルーチンのソース コードを読んでください。コメントにバグ番号がある場合は、それらも調べてください。

于 2011-07-20T11:22:25.657 に答える