无法正确处理AJAX请求

时间:2017-07-15 16:55:21

标签: php jquery ajax wordpress

我在Wordpress上有一个自定义表单(请不要建议联系表格7),允许用户捐赠给慈善机构。它使用jQuery Validate插件验证数据。一旦数据被认为有效,它就会将数据推送到第三方支付处理器。这很好但我想将表单上的数据存储到Wordpress DB中(联系信息和捐赠值)。

我不知道如何做到最好&虽然模板文件头中的PHP最简单,因为提交操作会导致重定向,我认为使用AJAX是最好的选择。我按照this教程,现在将JSON数据发送到AJAX“处理程序”文件。我的jQuery代码(经过验证等)如下:

console.log("Donation Type: " + donationType + " Once-off");
string = JSON.stringify(submission);
console.log(string);

jQuery.ajax({
    url : "http://192.168.8.50/subsite/wp-admin/admin-ajax.php",
    type : 'post',
    data : {
        action : 'store_donation_to_db',
        post_id : post_id,
        fields : string
    },
    success : function( response ) {
        console.log( response );
    }
});

//ProcessDonation(submission);

解释AJAX数据是我面临的问题。我使用了以下内容:

add_action( 'wp_ajax_nopriv_store_donation_to_db', 'store_donation_to_db' );
add_action( 'wp_ajax_store_donation_to_db', 'store_donation_to_db' );

function store_donation_to_db() {
    //register log file path
    $path = plugin_dir_path( __FILE__). 'test-button-log.txt';
    //$handle = fopen($path,"w");


    // The message written to the file
    $new_line = "****************************************************************************\r\n";
    $log_entry = $_REQUEST;
    // Write the contents to the file, 
    // using the FILE_APPEND flag to append the content to the end of the file
    // and the LOCK_EX flag to prevent anyone else writing to the file at the same time
    //
    file_put_contents($path, $log_entry, FILE_APPEND | LOCK_EX);

    $variables = json_decode($_REQUEST['store_donation_to_db']);
    //file_put_contents($path, $variables, FILE_APPEND | LOCK_EX);
    $counter= 0;
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { 
        $string = "Hello";
        foreach($variables as $field)
        {
            $string .= $field." ".$counter;
            $counter++;
        }
        echo $string;
        die();
    }
    else {
        wp_redirect( get_permalink( $_REQUEST['post_id'] ) );
        exit();
    }
}

我很沮丧,AJAX调用只会返回“Hello”,所以我添加了一行来将$ _REQUEST数据写入文本文件,该数据位于下方,看起来像JSON数组:

store_donation_to_db{\"Title\":\"Mrs\",\"FirstName\":\"Daniel\",\"Surname\":\"Holland\",\"EmailAddress\":\"daniel@dfdsfdsf.com\",\"ContactNumber\":\"\",\"DateofBirth\":\"2017-07-10\",\"undefined\":\"0\",\"recurringCHK\":\"1\",\"DonationAmount\":\"1000\"}

为什么我无法访问$ variables数组? $ _REQUEST变量不应该是包含post_idfields的数组作为其相应值的索引吗?我觉得我正处于正确的状态,而且可能是一条愚蠢的行我错了(考虑到文本文件日志的准确程度)。

1 个答案:

答案 0 :(得分:0)

您正在使用带有POST方法的AJAX,您可以使用php中的POST全局变量访问POST数据。

$ _ POST ['post_id]和$ _POST ['fields']然后解码json字符串并将其存储在DB中。

你试过这个吗?