为什么Wordpress中的Ajax响应不起作用?

时间:2019-06-02 11:42:56

标签: ajax wordpress

我在Wordpress中对Ajax感到奇怪(对我而言)。我没有从服务器收到适当的响应。我阅读了Wordpress Codex来找出我做错了什么,但仍然没有任何线索。

我不知道它是否重要,但是当我尝试向ajax语法添加类型时,收到一条错误消息。

class databaseClass
{
    function __construct()
    {

    if ( isset($_SERVER['HTTPS']) )  
       $protocol = 'https://';  
    else  
       $protocol = 'http://'; 

        wp_enqueue_script( 'ajaxScript', '/wp-content/themes/bulk/js/ajaxScript.js');
        wp_localize_script( 'ajaxScript', 'my_ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php', $protocol ), 
                 'nonce' => wp_create_nonce( '111')
            ) );
        add_action('wp_ajax_save_sort', 'ajaxFunctionInPHP');
        add_action( 'wp_ajax_nopriv_save_sort', 'ajaxFunctionInPHP');  
    }

    function ajaxFunctionInPHP(){
        /*check_admin_referrer();
        $response['custom'] = "ssss";
        $response = json_encode($response);
        wp_send_json($response) ;*/

        ob_clean();
        $response['custom'] = "TEST";

        echo $response;
        die();  
    }
}

class ajaxClass extends databaseClass
{
    function __construct()
    {
        parent::__construct();
    }





    public function ajaxPage()
    {
        echo '<form name="ajaxTest" type="POST">
             <input id="ajaxButton" type="button" value="KLIK"/>
             </form>
        ';
    }

}

jQuery( document ).ready( function () {
 jQuery('#ajaxButton').click(function() {
        var dataFromFunction="";
        jQuery.ajax({
            url: my_ajax_object.ajaxurl,
            type: 'POST',

            data: {
                action: 'save_sort',
                order: dataFromFunction
            },
            success: function (response){
                console.log("success message");
                console.log(response.custom)
            },
            error:  function (response){
                console.log("error message");
            }
        });
    });
} );
success message
ajaxScript.js?ver=5.0.4:15 undefined

1 个答案:

答案 0 :(得分:0)

您的代码似乎是正确的,但是我正在分享我的个人方法,以期对此有所帮助。如下所述对JS进行更改:

jQuery( document ).ready( function ($) {
    $('#ajaxButton').click(function() {
       var dataFromFunction="Test Data";
       $.ajax({
           url: my_ajax_object.ajaxurl,
           type: 'POST',
           data: {
               action: 'save_sort',
               order: dataFromFunction
           },
       }).done( function (response){
           console.log("success message");
           console.log(response.custom)
       }).fail(function (response){
           console.log("error message");
       }).always(function(){
           console.log('Ajax Completed');
       });
    });
});

对于您的脚本本地化而言,最好在admin_url函数中定义scheme参数,但这不是必需的,因此'ajax_url' => admin_url( 'admin-ajax.php')应该就可以了。

您似乎已经创建了随机数,但尚未使用它,一个好的做法是在表单部分而不是本地化中使用create nonce函数。

我确实对您的ajax响应功能有建议,但这只是一个建议。更改您的函数以返回,如下所示:

function ajaxFunctionInPHP(){
    $response['dataFromFunction'] = sanitize_text_field($_POST['dataFromFunction']);
    wp_send_json( $response);
}

祝你好运!

相关问题