0

我正在尝试使用 POST 在 wordpress 网站上检索一些脚本,但出现以下错误

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 的全局 $ 引用被删除,可能是通过调用jQuery.noConflict()

大概在您的内联脚本执行并定义 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 所以你把你的回调放在成功回调中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 回答