Wordpress AJAX不起作用 - 响应0

时间:2022-10-07 17:57:21

I want add AJAX support to my plugin and I have huge problem with this simple thing. WordPress isn't permitting me to use normal AJAX and I need to use WordPress version.

我想为我的插件添加AJAX支持,这个简单的事情我有很大的问题。 WordPress不允许我使用普通的AJAX,我需要使用WordPress版本。

At all times, the WordPress function (that should generate output) returns 0. And I think that the reason is that WP doesn't trigger 'function'. I try to force the function to run many times, but I don't have any idea what I can improve.

在任何时候,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(); 
}
}

I try to add alert('echo'); to the test function, but it doesn't have any effect. I think that AJAX doesn't run the proper function: fq_tag_support_callback() .

我尝试添加警报('echo');测试功能,但它没有任何影响。我认为AJAX没有运行正确的函数:fq_tag_support_callback()。

On the beginning I had a problem with ajaxurl variable. It was not defined. It's not a normal situation. I attempt to resolve this problem by using:

一开始我遇到了ajaxurl变量的问题。它没有定义。这不是正常的情况。我尝试使用以下方法解决此问题:

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";

Do you have any idea, how can I try to solve this problem?

你有什么想法,我怎么试着解决这个问题?

---EDIT--- After discussion with David I have file like this (all time doesn't work)

---编辑---与大卫讨论后我有这样的文件(所有时间都不起作用)

<?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);
?>

3 个解决方案

#1


4  

remove

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

your response should be echo if you check your console. I suspect all the above code is in your plugin functions file. Basically the php function should be placed in the functions file.

如果检查控制台,您的响应应该是echo。我怀疑以上所有代码都在你的插件函数文件中。基本上php函数应该放在函数文件中。

The jquery should be placed in the template from which you want to receive the response.

应将jquery放在要从中接收响应的模板中。

Place this in your functions file...remove the jquery from the class...

将它放在你的函数文件中...从类中删除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
}

Move this outside your class...

把它移到你的课外......

 function test_callback() {
                    $whatever = 8;
                    echo $whatever;
                    die();
 }

 add_action( 'wp_ajax_nopriv_testaction', 'test_callback' );
 add_action( 'wp_ajax_testaction', 'test_callback' );

#2


1  

Just make sure that you have put the function 'fq_tag_support_callback()' in your plugin's main file.

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

#3


0  

I see few problems here. Action should inside the data object, not as a jQuery Ajax parameter. Also in the callback function data is stored in $_POST variable.

我在这里看到的问题很少。 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);
?>

#1


4  

remove

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

your response should be echo if you check your console. I suspect all the above code is in your plugin functions file. Basically the php function should be placed in the functions file.

如果检查控制台,您的响应应该是echo。我怀疑以上所有代码都在你的插件函数文件中。基本上php函数应该放在函数文件中。

The jquery should be placed in the template from which you want to receive the response.

应将jquery放在要从中接收响应的模板中。

Place this in your functions file...remove the jquery from the class...

将它放在你的函数文件中...从类中删除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
}

Move this outside your class...

把它移到你的课外......

 function test_callback() {
                    $whatever = 8;
                    echo $whatever;
                    die();
 }

 add_action( 'wp_ajax_nopriv_testaction', 'test_callback' );
 add_action( 'wp_ajax_testaction', 'test_callback' );

#2


1  

Just make sure that you have put the function 'fq_tag_support_callback()' in your plugin's main file.

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

#3


0  

I see few problems here. Action should inside the data object, not as a jQuery Ajax parameter. Also in the callback function data is stored in $_POST variable.

我在这里看到的问题很少。 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);
?>