2009-08-20 17 views
0

私はコメントを表示するWebページを持っています。ユーザーは不適切なコメントを報告するために 'Flag'リンクをクリックすることができます。AJAXからのJavascript関数の実行 - HTML応答

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

[Submit]をクリックすると、別のAJAXリクエストを使用してデータベースが更新されたPHPファイルに応答を送信し、ページを再読み込みせずに「ありがとうございました」というメッセージが表示されます。私は本質的に、ドロップダウンボックスを表示するDIVが、別のAJAXリクエストを使用して「ありがとう」に置き換えられることを望みます。

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

PHPファイルを外部に読み込むとすべてうまく動作するので、JavaScriptが正しいことがわかります。 PHPのファイルをHTMLレスポンスDIVに読み込んだ後、そこからJavaScriptを呼び出すと動作しません。

したがって、すべてをまとめると、AJAXリクエストのHTMLレスポンスからどのようにJavaScript関数を実行しますか?

編集:ここでは、私が何をしたいのサンプルです:XMLHTTPの

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

値:

これは、人が旗リンクをクリックDIVを移入するAJAXの一部です。 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> 

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

ユーザーがボタンをクリックすると、javascript displayalert()関数は実行されません。アラートボックスがポップアップすることはありません。 innerHTMLでファイルを呼び出す代わりにファイルを外部に読み込むと、スクリプトはうまく動作します。

xmlhttp.responseTextにはJavaScriptコードが含まれていますか?

+0

が機能していないあなたのコードを投稿してみてください。あなたがしようとしていることを伝えるのは難しいです。 – noah

+0

ありがとうございます。上記のコードで私の元の投稿を更新しました。 – andrewl85

答えて

0

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

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

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

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

あなたもこれを読むことをお勧めします: http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

+0

フィードバックいただきありがとうございます。私は、返されたAJAXコードにJavaScript関数を組み込むのではなく、メインのPHPファイルにJavaScript関数を組み込むことで、この問題を解決することができました。私は返されたAJAXコードから関数を呼び出すことができました。 – andrewl85