[英]jquery POST error with wordpress
我正在嘗試使用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腳本
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
這里有幾個問題:
1)現在保持簡單,並像這樣構造你的代碼:
$(document).ready(function () {
$.getScript("http://localhost/project1/js/date.js", function() { }); //this script loads
});
2)AJAX異步是這樣,你把你的回調的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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.