0

ページの読み込み時に LinkPages() 関数を呼び出し、その HTML を DIV に追加します。

MasterPage.aspx

    function LinkPages()
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    alert(xmlhttp.responseText);
    }
    }
    xmlhttp.open("GET", "Page1.aspx", true);
    xmlhttp.send();
    }

私が遭遇した問題は、Page1.aspx の関数 GetMessage に決して呼び出されない XMLHttpRequest があることです。GetMessage() は、Page1.aspx のスパンの innerHTML を設定すると想定されていますが、呼び出されていません。

Page1.aspx

    function GetMessage()
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("lblMessage").innerHTML = xmlhttp.responseText;
    }
    }
    xmlhttp.open("GET", "wfrmHelper.aspx?action=message", true); --returns string
    xmlhttp.send();
    }

XMLHttpRequest のページで JavaScript を呼び出すことは可能ですか?

4

3 に答える 3

0

MasterPage.apsx の最初の XHR では、サーバーを呼び出して HTML を取得しています (そして、この Javascript GetMessage がそのページのどこかに混在していると推測しています)。XHR の responseText をドキュメントに追加しない限り、JavaScript は評価されません。そのため... LinkPages() では、XKR 呼び出しからの応答をドキュメントに追加する必要があります。その後、GetMessage 関数がブラウザーによって評価されます。追加されるまで、メモリ内の文字列のみです。DOM に配置するまで、実際にはスクリプトにはなりません。これが理にかなっていることを願っています。

于 2012-05-15T17:08:57.403 に答える
0

あなたの場合、 iframe の方がうまくいくかもしれません:

<iframe src="Page1.aspx" onload="LinkPages()"></iframe>

xmlHttpRequest を好む場合は、@aaronfrost で説明されているように、応答を取得した後にスクリプトを実行する方法を見つける必要があります。jQuery のようなライブラリがそれを行います (jQuery.load を使用する場合、jQuery にはスクリプトを実行する globalEval 関数があります)。

于 2012-05-15T17:18:03.867 に答える
-1

Re: XMLHttpRequest の応答ページで javascript を呼び出すことはできますか?

はい。ただし、応答をページに追加しても、自動的には行われません。

代わりに、応答でスクリプトを見つけて、各スクリプトを呼び出す必要があります。

さらに良いのは、応答に 2 つのセクションが含まれていることです。1 つは html 用で、もう 1 つは実行されるスクリプト用です。たとえば、応答には JSON 構造に 2 つの属性があります。

 {'html': '<div>blah blah....',  // the html part of the response
  'js':  'the javascript....'} // the javascript that you want to execute

また

  • また、受信する JS がロードする必要のあるライブラリに依存しているかどうかも考慮する必要があります。実行時に新しいライブラリ スクリプトを追加できます。
  • xmlhttprequest を直接呼び出すのは非常に悪い考えです。jQuery または別の lib を中間として使用します。

追加した

xmlhttprequest を直接呼び出すのが悪い考えである理由:

  1. バグ。(ライブラリを使用するのではなく)より多くのソフトウェアを作成する必要があります。より多くの SW == より多くのバグ、より多くのメンテナンスなど。悪い考えです。
  2. テスト。ソフトウェアは、機能依存またはブラウザ依存のいずれかになる必要があります。いずれにせよ、多くの人/アプリケーションで使用されている十分にテストされ、サポートされているライブラリに依存するよりも、コードは脆弱です。ライブラリを広く使用することで、ブラウザが変更されても適切に機能し続けることが保証されます。
  3. 保守性。追加のソフトウェア (さまざまなブラウザーのケースを処理するため) をメンテナが理解して更新するには、標準ライブラリを使用するソフトウェアよりも時間がかかります。
  4. 費用。バグが増え、テストが減り、メンテナンスが難しくなるということは、ソフトウェアのコストが時間の経過とともに標準ライブラリを使用する sw よりも高くなることを意味します。
  5. 偽りの経済。JS ライブラリには多くの選択肢があります。ダウンロード サイズが問題になる場合は、より完全なライブラリ (より大きなもの) またはより小さく軽量なライブラリを使用できます。(また、lib を使用する必要があると言いましたが、jQuery を使用する必要があるとは言いませんでした。)
  6. 重複したコード。ライブラリは最近非常に一般的であり、ライブラリがページによって既にロードされているか、ブラウザのキャッシュからロードできる可能性はかなり高いです。どちらの場合でも、ライブラリ以外のコードを使用すると、ライブラリを使用するよりも多くのスペース/時間がかかります。

要約すると、標準ライブラリを使用しない唯一の理由は、あなたが学生であり、課題でライブラリの使用が禁止されている場合です。

熟達した開発者が Ajax 呼び出しのブラウザーの非互換性をカバーするために lib を使用しない理由が見当たりません。異論があればコメントください。

于 2012-05-15T17:09:02.670 に答える