我需要在我的網站上為用戶的元添加一些資料。為此,我使用ajax來呼叫我服務器上的一個PHP檔案,然而,當代碼被執行時,它只是回傳null而不是用戶類。以下是JS代碼:
<script>
jQuery.ajax( {
type: "POST"。
url: 'https://mywebsite.com/wp-content/ajax/file.php'。
dataType: 'json',
data: {},
success: function (obj, textstatus) {
console.log(obj)。
}
});
</script>
而file.php的內容是:
<?php
header('Content-Type: application/json')。
global $current_user;
ini_set('display_errors', 1) 。
ini_set('display_startup_errors', 1) 。
error_reporting(E_ALL)。
//上述3行只是為了顯示錯誤(如果有的話)。
get_currentuserinfo()。
echo json_encode($current_user->ID)。
? >
當我執行這個時,錯誤說:Uncaught Error: Call to undefined function get_currentuserinfo() in...
當我洗掉這一行時,輸出結果只是null。我不知道我的做法是否正確,但請隨時提出不同的解決方案。我不需要回傳ID,但是$current_user變數不應該是空的。
uj5u.com熱心網友回復:
沒有理由包含一個單獨的.php檔案來處理AJAX請求。現在的情況是,因為你包含了你自己的自定義檔案,你把它在WordPress環境之外,所以你不能訪問WordPress的變數和函式。
你有兩種選擇:
使用內置的AJAX方法、動作和處理程式
在你的自定義.php檔案中 "包含 "WordPress
。
當然,我建議你采用第一種方法。它(幾乎)就像使用wp_ajax_{$action}鉤子一樣簡單,并將請求發布到admin-ajax.php,而不是你的檔案。
jQuery.post(
ajax_object.ajax_url。
{action: 'my_action'}。
function( response){
alert( 'Here is the response: ' response ) 。
}
);
并且在你的functions.php(或類似)檔案中:
//無論你在哪里que這個JS檔案,使用`wp_localize_script`來傳遞變數給它。
wp_enqueue_script( 'your-script', $link_to_your_js, array('jquery') ) 。
wp_localize_script( 'your-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax. php' ))。
然后
add_action( 'wp_ajax_my_action', 'my_action_function');
my_action_function(){
$user_info = get_currentuserinfo();
wp_send_json( $user_info ) 。
另一種方法--也不太合適--你可以將wp-load.php包含在你的file.php中,使用許多關于如何在檔案中 "包含wp-load.php"的答案之一
最后一點,使用wp_localize_script,你實際上可以將當前用戶的資訊直接傳遞給腳本,所以你不需要為它進行AJAX請求:
wp_localize_script( 'you-script', 'ajax_object', array(
'ajax_url' => admin_url( 'admin-ajax.php') 。
'current_userinfo' => get_currentuserinfo()
);
^在這一點上,你的腳本JS檔案將可以訪問current_userinfo.ID和所有其他的變數,它可以直接使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/307630.html
標籤:
上一篇:Capybara使用Seleniumwebdriver對#<RSpec::ExampleGroups>未定義方法`visit'。
