0

wordpress サイトで POST を使用していくつかのスクリプトを取得しようとしていますが、次のエラーが表示されます。

Uncaught TypeError: Cannot call method 'post' of undefined 

基本的に、いくつかのスクリプトをロードする外部 JavaScript ファイルをロードし、元のページの関数を呼び出して POST 呼び出しを実行し、データを取得します。

これとまったく同じスクリプトを「通常の」HTML ベースのサイトで使用したことがあるので、他の場所でも機能することがわかっています。ご覧のとおり、jQuery が読み込まれます。これは、.getScript を使用して別のファイルを取得しているためです (読み込みます)。

次に、retrieve_window(); 関数について説明します。テンプレートファイルにあります。

//template file that initially loads
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://localhost/Project1/js/retrieve_scripts.js"></script>
<div class="reserve_wrapper " id="resere_wrapper"></div>
<script>

    function retrieve_window(){

        $.post("http://localhost/Project1/windows/serve_window",function(data) {
            $('#reserve_wrapper').html(data);
            display_window();
        });
    }
</script>

ロードされる get_scritps ファイルは次のとおりです。

//retrieve_scripts.js
jQuery(document).ready(function ($) {   
    $.getScript("http://localhost/project1/js/date.js", function() { }); //this script loads
    retrieve_window(); //calls back to template file to make POST request
});

したがって、基本的に retrieve_window は、date.js スクリプトが適切にロードされるようにするためのコールバック関数です。

4

2 に答える 2

1

retrieve_scripts.js ファイルで参照される $ 変数は、.ready(function( $ ) {}) に渡される最初の引数です。これは、jQuery の使用法と一致しています。

インライン スクリプト タグで参照されている $ は、グローバルな $ 変数を参照しています。これは、スコープ内にその名前の変数が他にないためです。

おそらくjQuery.noConflict()を呼び出すことにより、実行中のコードのどこかで、jQuery へのグローバルな $ 参照が削除されています。

おそらく、インライン スクリプトが実行され、retrieve_window() 関数を定義する時点では、グローバル参照がまだ存在しています。これはハックですが、うまくいくと思います:

(function( $ ) {
    // we are in a closure but want this function to be global, so assign it globally
    retrieve_window = function() {
        // your code here
        $.post() etc. etc.
    };
} ( $ )); // capture a reference to the global value of $ now before it is removed
于 2013-10-17T00:09:17.083 に答える
1

ここでいくつかの問題:

1) 今のところは単純にして、コードを次のように構成します。

$(document).ready(function () {   
    $.getScript("http://localhost/project1/js/date.js", function() { }); //this script loads
});

2)AJAXはASYNCであるため、コールバックをsucceesコールバックに入れますgetScript

 $(document).ready(function () {   
        $.getScript("http://localhost/project1/js/date.js", function() { 
           retrieve_window();
         }); //this script loads
    });

また

 $(document).ready(function () {   
            $.getScript("http://localhost/project1/js/date.js", retrieve_window); //this script loads
        });
于 2013-10-17T00:15:41.430 に答える