AJAX调用无法在wordpress上运行 - 每次都返回HTML页面

时间:2018-01-09 12:19:20

标签: jquery ajax wordpress

我的ajax调用目前有一个反复出现的问题。 我总是有回复的html页面。

我发给你一个不起作用的典型例子。 它基本上是我开发的测验插件,并在每个阶段发送AJAX调用。此调用将填充数据库表。

  • Ajax调用插件首页



    var data = {
        action: 'insert_stat_question',
        security : ajax_var.nonce,
        id_formation: $(document).find('#id_formation').val(),
        id_module: $(document).find('#id_module').val(),
        id_question: button.attr('data-id-question'),
        num_question: button.attr('data-num-question'),
        id_user: $(document).find('#id_user').val(),
        statut: statut

    };

    jQuery.ajax({
        type:'POST',
        url: ajax_var.url,
        data:data,
        success: function(data){
             // Do your stuff here once ajax response is returned
             //console.log(result);
             console.log( data );
        },
        error: function(errorThrown) {
            console.log(errorThrown);
        },
    });

  • 插件文件列出所有ajax函数并注册ajax调用


    function theme_name_scripts() {
    wp_enqueue_script( 'script-name',  plugin_dir_url( __FILE__ ) . 'js/update_stat.js', array('jquery'), '1.0.0', true );
    wp_localize_script( 'script-name', 'ajax_var', array(
    // URL to wp-admin/admin-ajax.php to process the request
    'url' => admin_url( 'admin-ajax.php' ),
    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    // so that you can check it later when an AJAX request is sent
    'nonce' => wp_create_nonce( 'secure_callback' )
    ));
    }
    add_action( 'wp_enqueue_scripts', 'theme_name_scripts' );

  • PHP函数调用


    function insert_stat_question(){
    check_ajax_referer( 'secure_callback', 'security' );
    global $wpdb;
    $wpdb->insert( 
    $wpdb->prefix . 'quizzcreator_stats_question', 
    array( 
    'id_formation' => $_POST['id_formation'], 
    'id_module' => $_POST['id_module'],
    'id_question' => $_POST['id_question'],
    'num_question' => $_POST['num_question'],
    'meta_statut' => $_POST['statut'],
    'id_user' => $_POST['id_user'],
    'date_entry' => date('Y-m-d H:i:s')
    ), 
    array( 
    '%d', 
    '%d',
    '%d', 
    '%d',
    '%s', 
    '%d',
    '%s' 
    ) 
    );

    $response = [
        'working' => true
    ];

    wp_send_json_success($response);
    }
    add_action( 'wp_ajax_insert_stat_question', 'insert_stat_question' );
    add_action( 'wp_ajax_nopriv_insert_stat_question', 'insert_stat_question' );

我尝试了一切,但没有任何效果。

标题和响应ajax调用的屏幕截图:

Ajax Header

Ajax response

Ajax header form data

Complete ajax header with form data

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

查看wp_send_json_success

参数应该是您要作为响应发回的数据数组。

e.g。

$response = [
    'working' => true,
    'data1'     => 'My data 1',
    'data2'     => 'My data 2'
];

wp_send_json_success( $response );

在你的情况下,你可以做类似的事情,

$action = $wpdb->insert( 
    $wpdb->prefix . 'quizzcreator_stats_question', 
    array( 
        'id_formation' => $_POST['id_formation'], 
        'id_module' => $_POST['id_module'],
        'id_question' => $_POST['id_question'],
        'num_question' => $_POST['num_question'],
        'meta_statut' => $_POST['statut'],
        'id_user' => $_POST['id_user'],
        'date_entry' => date('Y-m-d H:i:s')
    ), 
    array( 
        '%d', 
        '%d',
        '%d', 
        '%d',
        '%s', 
        '%d',
        '%s' 
    ) 
);

wp_send_json_success( [ 'action' => $action ] );

同时将您的ajax请求更改为此类

$.ajax({
    type: 'POST',
    url: ajax_var.url,
    data: data,
    success: function(data) { 
        console.log( data );
    },
    error: function(errorThrown) {
        console.log(errorThrown);
    },
});