17

我正在尝试在 wordpress 中获取 ajax 请求的结果,但我在 javascript 的警告框中得到了“0”的结果,因此表单如下所示:

<form class="form" id="ajax-contact-form" action="#">                            
        <input type="text" name="name" id="name"  placeholder="Name" required="">
        <button type="submit" class="btn">Submit</button>
</form>

javascript看起来像这样:

$('#ajax-contact-form').submit(function(e){

    $.ajax({ 
         data: {action: 'contact_form'},
         type: 'post',
         url: ajaxurl,
         success: function(data) {
              alert(data); // This prints '0', I want this to print whatever name the user inputs in the form. 

        }
    });

})

和 PHP:

add_action('wp_ajax_contact_form', 'contact_form');
add_action('wp_ajax_nopriv_contact_form', 'contact_form');

function contact_form()
{
echo $_POST['name'];    
}

有谁知道上面的代码是否正确,我也试过 $_REQUEST['name'] 并且它不起作用。

非常感谢,

4

3 回答 3

11

尝试这样的事情,你没有name在你的 PHP 函数中添加你期望的参数contact_form,所以你必须将它添加到datajQuery ajax 函数调用中的属性中。

$('#ajax-contact-form').submit(function(e){
    var name = $("#name").val();
    $.ajax({ 
         data: {action: 'contact_form', name:name},
         type: 'post',
         url: ajaxurl,
         success: function(data) {
              console.log(data); //should print out the name since you sent it along

        }
    });

});
于 2013-09-13T03:29:50.463 回答
1

重新审视答案,2022 年。接受的答案是在不验证WordPress Nonce的情况下盲目接受任何 AJAX 请求。AJAX 请求应该被验证为合法请求,而不是来自某个未知不良行为者的潜在恶意请求。

您的 AJAX 处理程序应该做的第一件事是验证 jQuery 发送的随机数check_ajax_referer(),它应该与脚本入队时本地化的值相同。

首先我们传递 AJAX url 并创建并传递我们的 nonce wp_localize_script()wp_localize_script()必须在使用wp_register_script()or注册脚本后调用wp_enqueue_script()

<?php

wp_localize_script( 'script', 'localize',
    array(
        '_ajax_url' => admin_url( 'admin-ajax.php' ),
        '_ajax_nonce' => wp_create_nonce( '_ajax_nonce' ),
    )
);

从我们的script.js文件中,我们声明了我们的 AJAX 函数。

$(function(){
    $('button').click(() => {
        $.ajax({
            type: 'POST',
            url: localize._ajax_url,
            data: {
                _ajax_nonce: localize._ajax_nonce,
                test: 'test',

                /**
                 * The action parameter is the The dynamic portion of the wp_ajax_{$action} action hook (Ajax action callback being fired).
                 * 
                 * @see https://developer.wordpress.org/reference/hooks/wp_ajax_action/
                 * @see https://developer.wordpress.org/reference/hooks/wp_ajax_nopriv__requestaction/
                 */
                action: '_POST_action',
            },
            success: (res) => {
                console.log(res);
            }
        });
    });
});

我们处理结果并将 JSON 响应发送回 Ajax 请求。

<?php

add_action( 'wp_ajax__POST_action', function () {

    if ( check_ajax_referer( '_ajax_nonce' ) ) {

        $test = $_POST['test'];

        //...

        wp_send_json_success();

    } else {
        
        wp_send_json_error();

    };

} );
于 2022-01-11T15:22:25.540 回答
0

您也应该在 javascript 中为 name 添加一个属性。

它可能看起来像这样......

$('#ajax-contact-form').submit(function(e){

$.ajax({ 
     data: {action: 'contact_form', name:name},
     type: 'post',
     url: ajaxurl,      
     success: function(data) {
          alert(data); 
    }
});

})

于 2013-09-13T04:16:53.003 回答