0

コメントを表示する Web ページがあり、ユーザーは [フラグ] リンクをクリックして不適切なコメントを報告できます。

ユーザーが [フラグ] リンクをクリックすると、AJAX と innerHTML を使用して、コメントの下にドロップダウン ボックスを表示し、理由コード (スパム、攻撃的、トピックと無関係など) と [キャンセル] ボタンを表示します。

ユーザーが [送信] をクリックした場合、別の AJAX 要求を使用して、データベースが更新された PHP ファイルに応答を送信し、最後に (ページをリロードせずに) 「ありがとう」を受け取ります。基本的に、ドロップダウン ボックスを表示する DIV を、別の AJAX リクエストを使用して「ありがとう」に置き換えたいと考えています。

そこが問題です。最初の AJAX リクエストからの HTML レスポンス内から AJAX リクエストを実行できないようです。JavaScript 関数が失敗します。単純な Alert('hello world') でさえ機能しません。最初の AJAX リクエストを呼び出すメイン ページと、最初の AJAX リクエストからの HTML レスポンスとして表示される PHP ファイルに JavaScript 関数を配置しようとしましたが、うまくいきませんでした。呼び出されたときに実行されません。

PHP ファイルを外部からロードするとすべて正常に動作するので、JavaScript が正しいことがわかります。PHP ファイルを HTML 応答 DIV にロードし、そこから JavaScript を呼び出すと、うまくいきません。

すべてをまとめると、AJAX 要求の HTML 応答から JavaScript 関数をどのように実行するのでしょうか?

編集:ここに私がやりたいことのサンプルがあります:

これは、ユーザーが [フラグ] リンクをクリックしたときに DIV を設定する AJAX 部分です。

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

xmlhttp.responseText の値は、次の外部ファイルから取得されます。

<input type="hidden"/>
<script type="text/javascript" language="javascript">
function displayalert()
{
    alert ('Hello World!');
}
</script>

<form name="myform" id="myform">
<input type="text" name="myfield" value="teststring"/><br/>
<input type="button" name="button" value="Submit" 
   onclick="displayalert();"/>
</form>

注:上記は、 http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx<input type="hidden"/>から見つけた提案から来ています。

ユーザーがボタンをクリックしても、JavaScript の displayalert() 関数は実行されません。警告ボックスはポップアップしません。ファイルを innerHTML で呼び出すのではなく、外部から読み込むと、スクリプトは正常に動作します。

xmlhttp.responseText に JavaScript コードを含めることはできますか?

4

1 に答える 1

0

ブラウザーによって異なります: IE は ajax で読み込まれた html で scriptEval をサポートしていません。つまり、html にスクリプト ブロックがある場合、それらは呼び出されません。

Firefox はスクリプト評価をサポートしています。

私が通常行うことは、いくつかのjsonを入力に押し込み、ブラウザがscriptEvalをサポートしているかどうかを確認し、サポートしていない場合は、jsonをプルして評価し、jsonを渡すメソッドを呼び出すことです。

ブラウザーが scriptEval をサポートしている場合は、json と同じメソッドへの呼び出しを含むスクリプト ブロックも含めます。

これも読みたいかもしれません: http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

于 2009-08-20T19:33:05.620 に答える