繁体   English   中英

Wordpress AJAX不起作用 - 响应0

[英]Wordpress AJAX doesn't work - response 0

我想为我的插件添加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(); 
}
}

我尝试添加警报('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);
?>

去掉

<script>alert('echo');</script>

如果检查控制台,您的响应应该是回显。 我怀疑以上所有代码都在你的插件函数文件中。 基本上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' );

只需确保已将函数'fq_tag_support_callback()'放入插件的主文件中。

我在这里看到的问题很少。 Action应该在数据对象内部,而不是作为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);
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM