我想在我的插件中添加AJAX支持,而这个简单的东西有很大的问题。WordPress不允许我使用普通的AJAX,我需要使用WordPress版本。
在任何时候,WordPress函数(应生成输出)都返回0。我认为原因是WP不会触发“函数”。我试图强制该功能多次运行,但是我不知道我可以改进什么。
<?php public function widget( $args, $instance ) { $options = get_option('Free_Quotation_options'); ?> <script type="text/javascript" > jQuery(document).ready(function($) { var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; jQuery.ajax({ url: ajaxurl, type: 'POST', action: 'fqtag', data: { 'whatever': 'text' }, success: function (output) { $('#secondary').append(output); } }); }); </script> <?php add_action( 'wp_ajax_fqtag', 'fqtag' ); add_action( 'wp_ajax_nopriv_fqtag', 'fqtag' ); function fqtag() { global $wpdb; echo 'echo'; die(); } }
我尝试添加alert(’echo’); 测试功能,但没有任何效果。我认为AJAX无法运行适当的功能:fq_tag_support_callback()。
一开始,我对ajaxurl变量有疑问。未定义。这不是正常情况。我尝试通过使用以下方法解决此问题:
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
您有什么想法,我该如何解决这个问题?
-–编辑—与David讨论后,我得到了这样的文件(所有时间都不起作用)
<?php /* Plugin Name: TEST PLUGIN Description: TEST Author: Krzysztof Kubiak Version: 1.0 */ function Test_01_settings_init(){ register_setting( 'Test_01_settings_filed', 'Test_01_options', 'Test_01_validate' ); } add_action('admin_init', 'Test_01_settings_init' ); function T01_init_method() { wp_enqueue_script('jquery'); } add_action('init', 'T01_init_method'); function Test_01_menu_page(){ add_menu_page( 'Test_01', 'Test_01', 'manage_options', 'T01_menu_page', 'T01_add_page' ); echo my_test(); } add_action('admin_menu', 'Test_01_menu_page'); function my_test(){ echo 'Function test'; } function T01_add_page() { echo 'TEST_01_plugin'; } function Test_01_validate($input) { } //AJAX FROM HIRE function test_callback() { $whatever = 8; echo $whatever; die(); } add_action( 'wp_ajax_nopriv_fqtag', 'test_callback', 1 ); add_action( 'wp_ajax_fqtag', 'test_callback', 1 ); function print_js() { ?> <script type="text/javascript"> jQuery.ajax({ url: 'wp-admin/admin-ajax.php', type: 'POST', action: 'fqtag', data: { 'whatever': 'text' }, success: function (output) { alert(output); } }); </script> <?php } add_action('wp_print_footer_scripts', 'print_js', 1000); ?>
去掉
<script>alert('echo');</script>
如果您检查控制台,您的回应应该是echo。我怀疑以上所有代码都在您的插件功能文件中。基本上,php函数应放在函数文件中。
jQuery应该放置在您要从中接收响应的模板中。
将其放在函数文件中…从类中删除jquery …
add_action('wp_print_footer_scripts', 'print_js', 1000); function print_js() { ?> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery.ajax({ url: 'wp-admin/admin-ajax.php', type: 'POST', data: { 'action': 'test_callback', 'whatever': 'text' }, success: function (output) { alert(output); } }); }); </script> <?php }
将此内容移出课堂…
function test_callback() { $whatever = 8; echo $whatever; die(); } add_action( 'wp_ajax_nopriv_testaction', 'test_callback' ); add_action( 'wp_ajax_testaction', 'test_callback' );