が記載されていないのはなぜ私 <script> tag work from php file?(jQueryに関与しています)

StackOverflow https://stackoverflow.com/questions/1821917

質問

こちらはなんとしている国での生活を経験しました。している形でjQueryを利用しくは、AJAXの呼び出PHPファイルです。のPHPファイルとの相互作用データベースを作成し、ページのコンテンツとしてお返しするためには、AJAX対応;すなわちこのページのコンテンツを書き込む新しいウィンドウの成功の機能の $.ajax ます。一環として、ページの内容によって返されるPHPファイル、簡単なHTMLのスクリプトタグは、JavaScriptファイルです。具体的には:

<script type="text/javascript" src="pageControl.js"></script>

こ響ョンからいたいでけます。のpageControl.js は同一ディレクトリとしての私のphpファイルを生成します。

どのようにできるようになるようになる pageControl.js ファイルに含まれ又は作業に伴う新しいウィンドウの作成に対応しAJAXます。で終わるようなエラーは"オブジェクト"もしくは変数が定義されていない、私を信じて、ファイルが少なくなってきている。まコピーのためにJavaScriptを直接PHPfileるのではなく、スクリプトタグのsrc取得できます。

ものがあるのか、それは何なのか私が不足についてはこちらまでの範囲分解能との呼び出しファイル、php、jQueryのAJAX?私を含めたjavascriptファイルのこのように、将来のような理解できないということ間違っています。


こんにちはしてもらうことを目的として

私がこれからも、しっかりとこの問題もない。ってみを明らかにないということ、それまでにも安心です。私を含め一部のコードとしての要求を明確にもしております。

ここでは、シーケンス:

  1. ユーザーの選択オプション、クリック提出ボタンです。
  2. のボタンをクリックの取り扱いによるjQueryコードするようになります:

    $(document).ready(function() {
      $("#runReport").click(function() {
    
        var report = $("#report").val();
        var program = $("#program").val();
        var session = $("#session").val();
        var students = $("#students").val();
    
        var dataString = 'report=' +report+ 
                         '&program=' +program+
                         '&session=' +session+
                         '&students=' +students;
    
        $.ajax({
            type: "POST",
            url: "process_report_request.php",
            cache: false,
            data: dataString,
            success: function(pageContent) {
                if (pageContent) {
                    $("#result_msg").addClass("successMsg")
                        .text("Report created.");
    
                    var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes";
    
                    // open a new report window
                    var reportWindow = window.open("", "newReportWindow", windowFeatures);
    
                    // add the report data itself returned from the AJAX call
                    reportWindow.document.write(pageContent);
                    reportWindow.document.close();
                }
                else {
                    $("#result_msg").addClass("failedMsg")
                        .text("Report creation failed.");
                }
            }
        }); // end ajax call
        // return false from click function to prevent normal submit handling
        return false;
      }); // end click call    
    }); // end ready call
    

このコードを実行AJAXの呼び出PHPファイルprocess_report_request.php)のページのコンテンツを変更する場合がございます。このコンテンツからのデータベースは、HTML.のPHPファイルに含めたい他のjavascriptファイルのヘッドjavascriptの使用に変更する場合がございます。に努めています。

<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>

変更パフォルダの名前を保護する罪のない:)

のpageControl.js ファイルが実際と同じフォルダのjQueryコードファイルやphpファイルかもしれませんが、同じようにファイル名のフルパスで変更することができます。 私もアクセスできるjsファイルのURLをブラウザ、またこちらをご覧ください、静的なhtmlのテストページにスクリプトタグのsrc.

後のjavascriptファイルが含まれるphpファイル、話す機能を次のようにエコーからのサポートに対するコミットメント:

 echo '<script type="text/javascript" language="javascript">writePageControls();</script>';

なので、phpファイル送信のすべてのページのコンテンツはAJAX、その後の新しいウィンドウが開き、返されるコンテンツを書き込むこのjQueryコードです。

writePageControls ラインは取得し、エラーエラー:オブジェクト"といいます。 しかしながら、JavaScriptで動作し、静的なHTMLページが含まれる場合"インライン"のPHPファイルなので、先にこのパスに問題になっています。

再度、どのように、私の話の機能のpageControls.js ファイルの作動していない。 を置いの内容pageControl.js ファイルのphpファイルとスクリプトタグに変更も、それによって期待される。

何がいいか迷った場合のパスの解決を新しく開いたウィンドウが正しくありません。いるようで分からないのはなぜかこれまでのフルパス。ものを混乱させる事で、私のリンクスタイルシート作品は、イブレア城、イブレアからのPHPファイルです。

おかすがいの時間がことさらに、大幅なくてはならないものです。私stumped. 私は初心者ですが多くのこ, なので、あっと良いことこの問題を回避するため、すべての耳や目にか...)

役に立ちましたか?

解決

これと同様の問題もありましたが、これは本当に頭痛の種でした。次のアプローチはエレガントではないかもしれませんが、私にとってはうまくいきました。

  1. あなたのPHPファイルがあなたが望むものを出力することを確認してください 本体
  2. 動的にjqueryをウィンドウヘッドに追加する
  3. 外部のスクリプトファイルをウィンドウヘッドに動的に追加する
  4. ウィンドウのドキュメントでjQuery htmlを使用して、ボディに読み込まれたコンテンツを使用してhtml()を呼び出し、スクリプトが評価されるようにします。

たとえば、ajaxの成功例:

success: function(pageContent) {
        var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes";
        var reportWindow = window.open("", "newReportWindow", windowFeatures);

        // boilerplate
        var boilerplate = "<html><head></head><body></body></html>";

        reportWindow.document.write(boilerplate);

        var head = reportWindow.document.getElementsByTagName("head")[0];

        var jquery = reportWindow.document.createElement("script");
        jquery.type = "text/javascript";
        jquery.src = "http://code.jquery.com/jquery-1.7.min.js";
        head.appendChild(jquery);

        var js = reportWindow.document.createElement("script");
        js.type = "text/javascript";
        js.src = "/folder1/folder2/folder3/pageControl.js";
        js.onload= function() {
            reportWindow.$("body").html(pageContent);
        };
        head.appendChild(js);


        reportWindow.document.close();

    }

がんばって!

他のヒント

おそらく、JavaScriptファイルを取得しようとしていると思われる場所を探しているのではないでしょう。

次のようなサーバー相対形式を試してください:

<script src="/some/path/to/pageControl.js"></script>

それでもまだ機能しない場合は、スクリプトファイルのURLをブラウザーに入力してダウンロードできることを確認してください。

HTMLページの&lt; head&gt; または&lt; body&gt; 内にあることを確認してください。また、.jsファイルへのパスを再確認します。 &quot; pageControl.js&quot;を貼り付けることでそれを行うことができます。ウェブアドレスのルートで。

探すべきもの:

  • Firebug(NETタブ)を使用して、jsファイルがステータス 200 でロードされているかどうかを確認します。また、[コンソール]タブでjavascriptエラーを確認します。
  • HTML5オフラインを使用していますか。もしそうなら、おそらく&lt; script&gt; タグを含まないキャッシュされたバージョンを提供します。
  • ページのソースを表示し、 script タグが含まれていることを確認します。
  • ソース属性を絶対パスに変更します:&lt; script src =&quot; http://www.example.com/js/pageControl.js" type =&quot; text / javascript&quot;&gt;&lt; / script&gt;
  • http://www.example.com/js/pageControl.js にアクセスして、正しく表示されることを確認します。
  • &lt; head&gt; の直後に&lt; script&gt; を配置して、最初に読み込まれるようにします。

これは私が考えることができるすべてです。

要素を作成し、それをheadまたは他の要素に追加することにより、スクリプトを動的にロードできます:

reportWindow.document.write(pageContent);                      
var script = document.createElement('script');
script.src = 'pageControl.js';
script.type = 'text/javascript';
reportWindow.document.getElementsByTagName('head')[0].appendChild(script);
reportWindow.document.close();

jquery $(&quot;#target_div&quot;)。load(...)を使用してみましたか これにより、出力内でJSも実行されます...

このドキュメントを読んで使用方法を確認してください:

http://api.jquery.com/load/

私には、アンロードされたスクリプトが機能することを期待しているように思えます。

こちらをご覧ください: http://ensure.codeplex.com/ SourceControl / changeset / view / 9070#201379

これは、アクセスが試行される前にスクリプトが適切にロードされることを保証する少しのJavaScriptです。これを遅延読み込み(必要な場合にのみJavaScriptファイルを読み込む)として使用するか、問題を解釈すると、ajax呼び出しの結果に基づいてスクリプトを読み込むことができます。

何かが起こってい響き渡る文字列を介ajaxコールバック、挿入要素になります。外部スクリプトを必要と第二の取得の呼び出負荷、その内容、なみの最初の呼び出しました。ですから最初の呼び出しは、インラインコードをDOMにな追加取得の請求を取り出します。る場合、DOMんのスクリプトは、DOMな実行しますが、その一部をランダムタグです。

が非常に高速にしてください。にChromeやFirefox開いているのがfirebugのプラグインを設置)、チェックのコンソール>スクリプトドロップダウンすべてに搭載のイントロダクションです。いない場合は、で読み込まれ、スクリプトタグのマークアップは不活性である。

でも文字列とPHPの正常に動きを作成するPHPのDOMオブジェクトに挿入すると正しくはこぶ).代わりに、か では最後のページでは、直前最終身体まることが期待される。 この優位置jsとにかく死去した後に、その他の要素のページをロードにご用意しておりますDOM.)

HTH:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top