我正在尝试将2个Wordpress AJAX 脚本加入到我的functions.php文件中,但是我似乎遇到了一个错误。第一个AJAX脚本工作正常,但是第二个我一直得到一个500内部服务器错误。
到目前为止,我在 AJAX 脚本中所拥有的是:
第一个块是我的第一个 AJAX 脚本,位于my-ajax-script.js
。
function lesson_watched_call(lesson_id_value) {
console.log('Lesson watched fn called.');
console.log(lesson_id_value);
$.post(my_ajax_obj.ajax_url, {
_ajax_nonce: my_ajax_obj.nonce, // nonce
action: "lesson_watched", // action call
lesson_value: lesson_id_value // data
});
}
第二个块是我的第二 AJAX 脚本,位于fav-ajax-script.js
。
function toggleFavTut(tutorial_id_value) {
console.log('Tutorial toggle fn called.');
console.log(tutorial_id_value);
$.post(my_ajax_obj.ajax_url, {
_ajax_nonce: my_ajax_obj.nonce, // nonce
action: "tutorial_fav_toggle", // action call
tutorial_value: tutorial_id_value // data
});
}
在我的functions.php
文件中,我有:
/*---------------------------------------------------------------------------------*/
/* Enqeue AJAX Script and Define Lesson Watched Function */
/*---------------------------------------------------------------------------------*/
add_action( 'wp_enqueue_scripts', 'enqueue_ajax_scripts' );
function enqueue_ajax_scripts() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );
wp_localize_script( 'ajax-script', 'my_ajax_obj',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'lesson_nonce_value' ),
)
);
wp_enqueue_script( 'ajax-script2', get_template_directory_uri() . '/js/fav-ajax-script.js', array('jquery') );
wp_localize_script( 'ajax-script2', 'my_ajax_obj',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'tutorial_nonce_value' ),
)
);
}
function lesson_watched() {
$lastValue_php = wp_unslash( $_POST['lesson_value'] );
$current_user_id = get_current_user_id();
$found = get_user_meta( $current_user_id, 'lessons_watched_ids', true );
if ( !in_array( $lastValue_php, $found ) ) :
if( empty( $found ) ) :
update_user_meta( $current_user_id, 'lessons_watched_ids', array( $lastValue_php ) );
else :
$found[] = $lastValue_php;
update_user_meta( $current_user_id, 'lessons_watched_ids', $found );
endif;
endif;
wp_die(); // Ends all AJAX handlers
}
add_action('wp_ajax_nopriv_lesson_watched', 'lesson_watched');
add_action('wp_ajax_lesson_watched', 'lesson_watched');
/*---------------------------------------------------------------------------------*/
/* Enqeue AJAX Script and Define Tutorial Toggle Function */
/*---------------------------------------------------------------------------------*/
function tutorial_fav_toggle() {
$tutorial_value = wp_unslash( $_POST['tutorial_value'] );
$current_user_id = get_current_user_id();
$found = get_user_meta( $current_user_id, 'tutorial_favorited_ids', true );
if ( !in_array( $tutorial_value, $found ) ) :
$found[] = $tutorial_value;
update_user_meta( $current_user_id, 'tutorial_favorited_ids', $found );
else:
$key = array_search( $tutorial_value, $found );
unset( $found[$key] );
update_user_meta( $current_user_id, 'tutorial_favorited_ids', $found );
endif;
wp_die(); // Ends all AJAX handlers
}
add_action('wp_ajax_nopriv_tutorial_fav_toggle', 'tutorial_fav_toggle');
add_action('wp_ajax_tutorial_fav_toggle', 'tutorial_fav_toggle');
我首先将两个脚本排队,然后对每个脚本进行本地化。我想知道是否可能必须对某些本地化变量使用不同的变量,但我不确定。您是否有调试的提示?
1条答案
按热度按时间rta7y2nd1#
根据docs,
wp_localize_script
的第二个参数应该是唯一的。$object_name是包含数据的变量的名称。注意这对于脚本和插件或主题都是唯一的。因此,这里的值应该正确地加上slug或其他唯一的值作为前缀,以防止冲突。
因此,按照您的模式,第二个函数可以使用
my_ajax_obj2
作为变量。一定要注意让你的变量也特定于你的应用程序。这些变量实际上都只是全局
window
对象上的属性,任何东西都可以读/写它们,所以要确保它们是唯一的。