我最近为我的网站开发了一个使用AJAX的小插件,现在我正试图为同一个网站的模板实现相同的AJAX技术,但我不断得到-1
因此,这是我的代码,
功能。php:
//Front end AJAX functions
function eu_custom_query(){
global $post;
global $wpdb;
echo "yo";
die();
}
function enque_template_scripts() {
wp_deregister_script( \'jquery\' );
wp_register_script( \'jquery\', \'http://code.jquery.com/jquery-1.6.2.js\');
wp_enqueue_script( \'jquery\' );
// embed the javascript file that makes the AJAX request
wp_register_script( \'scripts.js\', get_bloginfo(\'template_directory\').\'/scripts/scripts.js\');
wp_enqueue_script( \'scripts.js\' );
// declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
wp_localize_script( \'scripts.js\', \'wp_ajax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action(\'wp_ajax_custom_query\', \'eu_custom_query\');
add_action(\'wp_ajax_nopriv_custom_query\', \'eu_custom_query\');
add_action(\'get_header\', \'enque_template_scripts\');
脚本。js公司:
$(document).ready(function(){
$("#do_ajax").click(function(){
$.post(wp_ajax.ajaxurl, { action: \'eu_custom_query\' }, function(data){
alert(data);
});
});
});
我正在使用Wordpress版本3.2.1
你知道我做错了什么吗?
最合适的回答,由SO网友:Cristian 整理而成
您正在将“eu\\u custom\\u query”作为AJAX中的操作传递。它应该是“custom\\u query”。
您决定操作名称,当您添加操作时,即“wp\\u ajax\\u my\\u action”将被称为“my\\u action”
您将其与回调方法混淆。希望这是有意义的。
p、 要修复代码更改,请执行以下操作:
add_action(\'wp_ajax_custom_query\', \'eu_custom_query\');
add_action(\'wp_ajax_nopriv_custom_query\', \'eu_custom_query\');
收件人:
add_action(\'wp_ajax_eu_custom_query\', \'eu_custom_query\');
add_action(\'wp_ajax_nopriv_eu_custom_query\', \'eu_custom_query\');
SO网友:Chip Bennett
我看到两个问题:
noConflict
WordPress
requires noConflict wrappers for jQuery. 因此:
$(document).ready(function(){
。。。需要这样做:
jQuery(document).ready(function($) {
。。。因此
$
将在功能内部正常工作。
Blanket replacement of core-bundled script
此外,您正在赤裸裸地替换核心捆绑jQuery,这是您永远不应该做的,否则您将有破坏WP Admin后端的风险。
任何此类代码must 包裹在if ( ! is_admin() )
有条件的:
if ( ! is_admin() ) {
wp_deregister_script( \'jquery\' );
wp_register_script( \'jquery\', \'http://code.jquery.com/jquery-1.6.2.js\');
wp_enqueue_script( \'jquery\' );
}