Wordpress AJAX 不起作用 - 响应 0
Posted
技术标签:
【中文标题】Wordpress AJAX 不起作用 - 响应 0【英文标题】:Wordpress AJAX doesn't work - response 0 【发布时间】:2014-12-17 02:20:13 【问题描述】:我想为我的插件添加 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'); ?>";
您有什么想法,我该如何解决这个问题?
---编辑---在与大卫讨论后,我有这样的文件(所有时间都不起作用)
<?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);
?>
【问题讨论】:
如果您查看页面的源代码,是否包含 jquery.js 文件?应该是,但如果不是,您需要将其加入队列。您是否也在源代码中看到了您的 JS? 是:远程地址:[::1]:80 请求 URL:localhost/wordpress/wp-includes/js/jquery/jquery.js?ver=1.11.0 例如当我在 jQuery(documet) 脚本中添加这一行时: $( "#secondary" ).append( "测试
" );它工作完美 【参考方案1】:只需确保您已将函数 'fq_tag_support_callback()' 放入插件的主文件中。
【讨论】:
是的 - 这个函数在我插件的主文件中。前段时间我遇到了选项问题,现在我总是尝试将代码移动到主插件文件以检查问题的原因。【参考方案2】:删除
<script>alert('echo');</script>
如果您检查控制台,您的响应应该是回显。我怀疑以上所有代码都在您的插件函数文件中。基本上php函数应该放在functions文件中。
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' );
【讨论】:
嗨。我添加这部分代码只是为了测试它。如果没有这部分,我会得到相同的结果 - 控制台中的 0 ......这部分代码在主插件文件中,就像我写给 @WisdmLabs 一样。 更新了其他东西来尝试,它的代码基本相同,但我知道它可以工作...... 很遗憾,结果是 0 。 (你在成功之前错过了一次昏迷;))。我认为这个问题并不完全在 AJAX 中,而是在 PHP 部分代码中。这部分代码不起作用,结果是JS输出0。 我不这么认为,intval 为文本返回 0,但您没有输出。但无论如何都要尝试评论它。似乎仍然找不到该功能。你有 jquery 代码的页面 url 是什么? 我编辑有问题的代码(根据您的建议)。这段代码的输出也是... 0. 页面地址:localhost/wordpress 我之前多次使用这个服务器,在非 WordPress 工作中尝试 AJAX 功能。【参考方案3】:我在这里发现了一些问题。 Action 应该在 data 对象 中,而不是作为 jQuery Ajax 参数。同样在回调函数中数据存储在 $_POST 变量中。
function test_callback()
$whatever = $_POST['whatever'];
echo $whatever;
die();
add_action('wp_ajax_nopriv_fqtag', 'test_callback');
add_action('wp_ajax_fqtag', 'test_callback');
function print_js()
?>
<script type="text/javascript">
jQuery.ajax(
url: <?php echo admin_url('admin-ajax.php'); ?>,
type: 'POST',
data:
action: 'fqtag',
whatever: 'text'
,
success: function (output)
alert(output);
);
</script>
<?php
add_action('wp_print_footer_scripts', 'print_js', 1000);
?>
【讨论】:
以上是关于Wordpress AJAX 不起作用 - 响应 0的主要内容,如果未能解决你的问题,请参考以下文章