通过AJAX获取Woocommerce客户详细信息并将其填充到Gravity Forms表单中

时间:2015-07-16 14:34:16

标签: jquery ajax wordpress woocommerce

我需要获取客户详细信息(客户数据在个人资料页面上提供),并在需要时填写重力表单。

到目前为止,我意识到我需要类似描述here的内容,但由于某种原因我的javascript没有按预期返回数据。这是我的代码:

jQuery(document).ready(function() {
    // form pre-population when "I am the Insured* entity" checkbox is checked
    if ( !globals.logged_in ) { 
        jQuery('li#field_1_160').remove();
    } else {
        jQuery('#choice_1_160_1').change(function() {
            console.log('customer data: change ');
            if(jQuery(this).is(":checked")) {
                console.log('customer data: checked ');

                var data = {
                    user_id:      globals.userID,
                    type_to_load: 'billing',
                    action:       'woocommerce_get_customer_details',
                    // security:     woocommerce_admin_meta_boxes.get_customer_details_nonce
                };

                jQuery.ajax({
                    url: globals.ajax_url,
                    data: data,
                    type: 'POST',
                    success: function( response ) {
                        var info = response;
                        console.log('customer data: ' + response);
                    },
                    error: function() {
                        console.log('An error occurred');
                    }
                    });
            } else {
                console.log('customer data: unchecked ');
            }
        });
    } 
});

这是我点击复选框(id choice_1_160_1)时在控制台中获得的内容:

wpchris.com.js?ver=1.0:68 customer data: change 
wpchris.com.js?ver=1.0:71 customer data: checked 
wpchris.com.js?ver=1.0:87 customer data: -1

我认为这个问题出现在我注释掉的那一行:

// security:     woocommerce_admin_meta_boxes.get_customer_details_nonce

我这样做是因为它遇到了错误:

Uncaught ReferenceError: woocommerce_admin_meta_boxes is not defined

我在Woocommerce代码中看到它在少数地方使用woocommerce_admin_meta_boxes对象(例如在woocommerce \ assets \ js \ admin \ meta-boxes-order.js:119)但由于某种原因我无法做到。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,解决方案非常简单 - 在PHP方面我只需要使用wp_create_nonce()创建并将其作为变量添加到javascript:

   $globals = array(
       'userID' => $userID,
       'get_customer_details_nonce' => wp_create_nonce('get-customer-details')
   );

   wp_localize_script( 'wpchris-customization-js', 'globals', $globals );

现在,在Javascript部分我可以使用这个随机数:

       var data = {
            user_id:      globals.userID,
            type_to_load: 'billing',
            action:       'woocommerce_get_customer_details',
            security:     globals.get_customer_details_nonce
        };