我正在嘗試通過按下按鈕來呼叫 php 函式。
到目前為止,這是我的代碼:
echo("<button onclick=\"import_file()\"> Import </button>");
Javascript upload.js 檔案:
function import_file () {
jQuery.ajax({
url: my_ajax_object.ajax_url,
data: {action: 'final_save'},
type: "POST", //request type
success:function(result){
alert(result);
}
});
}
以及主 php 檔案中的操作:
function final_save(){
check_admin_referer('import-upload');
set_time_limit(0);
$this->file = $file;
$result = $this->save();
if ( is_wp_error( $result ) ){
echo $result->get_error_message();
}else{
echo "Success";
}
}
add_action('wp_ajax_final_save', 'final_save');
add_action('wp_ajax_no_priv_final_save', 'final_save');
我還將腳本排入同一檔案中:
function enqueue_script(){
$plugins_url = plugins_url();
$base_url = get_option( 'https://www.virtualmin.archives.com' );
$plugins_dir = str_replace( $base_url, ABSPATH, $plugins_url );
$plugin = $plugins_dir.'/really-simple-csv-importer/upload.js';
wp_enqueue_script('js-file', $plugin, array('jquery'), '', false);
wp_localize_script( 'js-file', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
//Load jQuery
wp_enqueue_script('jquery');
}
并從調度中呼叫此函式:
function dispatch() {
$this->header();
$this->enqueue_script();
//more code
}
在這里呼叫調度:
function really_simple_csv_importer() {
load_plugin_textdomain( 'really-simple-csv-importer', false, dirname( plugin_basename(__FILE__) ) . '/languages' );
$rs_csv_importer = new RS_CSV_Importer();
register_importer('csv', __('CSV', 'really-simple-csv-importer'), __('Import posts, categories, tags, custom fields from simple csv file.', 'really-simple-csv-importer'), array ($rs_csv_importer, 'dispatch'));
}
add_action( 'plugins_loaded', 'really_simple_csv_importer' );
我收到 admin-ajax.php 400(錯誤請求)錯誤。知道我在做什么錯嗎?這是在插件中編碼的。
uj5u.com熱心網友回復:
我似乎記得讀過你需要注冊,本地化,然后在使用 ajax 時將腳本排入佇列,而不是
wp_enqueue_script('js-file', $plugin, array('jquery'), '', false);
wp_localize_script( 'js-file', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
嘗試
wp_register_script('js-file', $plugin, array('jquery'), '', false);
wp_localize_script( 'js-file', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
wp_enqueue_script('js-file', $plugin, array('jquery'), '', false);
我希望這有幫助
我也知道這可能不是問題,但我認為你需要 wp_die() 或死;總是在被呼叫的函式中,即 final_save
uj5u.com熱心網友回復:
我可以看到您的 php 檔案中存在拼寫錯誤,因此只需替換以下行
add_action('wp_ajax_no_priv_final_save', 'final_save');
與以下一個
add_action('wp_ajax_nopriv_final_save', 'final_save');
希望這有助于解決錯誤。
uj5u.com熱心網友回復:
除了@jtowell 已經給出的答案之外,您還需要在本地化中添加一個亂數并檢查后端的參考者。由于這可能是第一次令人困惑,我強烈建議您按照檔案中的步驟進行操作。
一般演練: https ://developer.wordpress.org/plugins/javascript/ajax/
具體檔案: https ://developer.wordpress.org/reference/functions/check_ajax_referer/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461019.html
標籤:javascript php 阿贾克斯 WordPress
下一篇:Ajax呼叫后腳本無法正常運行
