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的主要内容,如果未能解决你的问题,请参考以下文章

在 Ajax 响应中,我的 if 条件不起作用

我正在尝试使用 Jquery-Ajax 使用 JSON 响应,但它不起作用。正在加载空选择下拉列表

插件管理页面中的 Ajax 表单不起作用

Ajax成功功能在jquery mobile中不起作用

在 WordPress 插件中使用 AJAX

Wordpress、管理菜单、Ajax 400 错误请求