0

さて、これは簡単なはずですよね?test.php:

function some_javascript() {
        echo "Hello";
        echo "<script type='text/javascript'>alert('Hello')<script>";
}

test.phpを読み込もうとすると、アラートウィンドウが表示されます。

モーダルウィンドウをターゲットとして使用し、ポスト経由でAJAXリクエストを使用してこれを機能させることができないため、何かが足りないに違いありません。

これが私がやろうとしていることの基本的な構造です:

index.html:

<html>
<head>
<style>
 #modal {
    visibility:hidden;
 }
</style>
</head>
<body>
    <div id="modal">
    </div>
    <button onclick="call_ajax();">Call Ajax</button>
</body>
</html>

call_ajax()は、モーダル可視性を「visible」に設定し、そのinnerHTMLをtest.phpからの応答テキストに設定します(ここでは問題がないように見えるため、コードを記述しません。テキストは問題なく送信されます(「hello」を取得します)送信された投稿データは必要に応じて処理されます)。しかし、アラートウィンドウはありません!代わりに、「alert('Hello')」を取得します。

それ以外はコードは正常に動作しますが、JavaScriptを動作させることができません。私が欠けている詳細があるに違いありません。何か案は????

4

5 に答える 5

1

<script>からタグを追加してタグを実行することはできませんinnerHTML。次の質問を参照してください:スクリプトを innerHTML で挿入できますか?

于 2012-07-05T17:51:38.427 に答える
0

まず、スクリプトコードをHTMLとして挿入することはできません。そのように表示されます(実際に挿入されました)。

次に、ドキュメントにSCRIPT要素を挿入した場合でも、最初の解析はすでに実行されており、アラートは実行されません。

あなたができることは、スクリプトコードを解析して評価することです。

<!DOCTYPE html>
<html>
<head>
    <style>
        #modal {
            visibility:hidden;
        }
    </style>
    <script type="text/javascript">
        function call_ajax() {
            var ajaxData = "Hello\n<script type='text/javascript'>alert('Hello')<\/script>";
            var scriptStartPos = ajaxData.indexOf("<script type='text/javascript'>");
            if(scriptStartPos >= 0) {
                var scriptPos0=scriptStartPos+31;
                var scriptEndPos= ajaxData.indexOf("<\/script>", scriptPos0);
                if(scriptEndPos >= scriptPos0) {
                    eval(ajaxData.substring(scriptPos0,scriptEndPos));
                }
            }
        }
</script>
</head>
<body>
<div id="modal">
</div>
<button onclick="call_ajax();">Call Ajax</button>
</body>
</html>

この場合、エスケープされていない一重引用符を使用していることに注意してください。

于 2012-07-05T21:24:24.200 に答える
0

これを行うための Javascript ライブラリはたくさんあります。

lazyload を試す: https://github.com/rgrove/lazyload

于 2012-07-22T17:48:59.863 に答える
0
echo "<script type='text/javascript'>alert('Hello')<script>";

する必要があります

echo "<script type='text/javascript'>alert('Hello')</script>";

また、誰かが私の下に投稿したように、この方法ではスクリプトを実行できません。

于 2012-07-05T17:51:57.047 に答える
0

基本的にコードAjax Requestをロードしません。Javascript

私はこのようなものを使用して、Javascriptコードを ajax から動作させていresponseTextます。

Javascript :

//pseudo function :
function call_ajax() {
  var ajaxResponse = "some data you have received with ajax"; 

  var div = document.createElement("div");
  div.innerHTML = ajaxResponse;
  var script = div.getElementsByTagName("script");
  for(var i=0; i < script.length; i++) {
    try{eval(script[i].innerHTML)}catch(ex){alert(ex)};
  }
};

このコードは、ajax で読み込まれたデータになる空のdiv要素を作成します。innerHTMLJavascript は単純なテキストを html ノードに変換し、Javascript「スクリプト」タグを見つけることで応答にコードが含まれているかどうかを確認し、コードを評価してjavascriptコードを実行しようとするだけで完了です。

PS: 私の考えでは、javascript を ajax でロードするのは得策ではありません。同じ JavaScript コードに対して 2 つの ajax リクエストを実行するとどうなるか見てみましょう。同じコードが 2 回読み込まれるため、コードにバグが生じる可能性があります。

于 2012-07-22T17:22:28.020 に答える