Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AJAX存储cookie的jQuery不起作用_Jquery_Ajax_Wordpress_Woocommerce - Fatal编程技术网

使用AJAX存储cookie的jQuery不起作用

使用AJAX存储cookie的jQuery不起作用,jquery,ajax,wordpress,woocommerce,Jquery,Ajax,Wordpress,Woocommerce,我试图在用户登录时存储一个包含用户邮政编码的cookie。对于PHP登录,使用“wp_login”操作钩子可以很好地工作。但我的网站也有AJAX登录。到目前为止,我的代码没有工作,但它也没有抛出任何错误 jQuery: function get_zipcode() { jQuery.get(ajaxurl,{'action': 'user_zipcode_callback'}, function (zipcode) {

我试图在用户登录时存储一个包含用户邮政编码的cookie。对于PHP登录,使用“wp_login”操作钩子可以很好地工作。但我的网站也有AJAX登录。到目前为止,我的代码没有工作,但它也没有抛出任何错误

jQuery:

        function get_zipcode() {
            jQuery.get(ajaxurl,{'action': 'user_zipcode_callback'}, 
            function (zipcode) {
                Cookies.remove('visitor_zipcode');

                if (zipcode != '') {
                    var CookieDate = new Date;
                    CookieDate.setFullYear(CookieDate.getFullYear() +10);
                    document.cookie = 'visitor_zipcode=' + zipcode + '; expires=' + CookieDate.toUTCString() + '; path=/';
                }
            }).then(function(){
                window.location.reload(true);
            });
        }
        jQuery(document).on('lrm_user_logged_in', function(response, $form) {
            get_zipcode();
        });
获取用户邮政编码的AJAX调用:

function user_zipcode_callback() {
    $user_zipcode = get_user_meta(get_current_user_id(),"shipping_postcode",true);
    if($user_zipcode == '') $user_zipcode = get_user_meta(get_current_user_id(),"billing_postcode",true);
    echo $user_zipcode;

    wp_die(); // this is required to terminate immediately and return a proper response
}
add_action('wp_ajax_user_zipcode_callback', 'user_zipcode_callback');
这是一个PHP登录,它是无关的,但可能可以添加一个上下文:

function add_zipcode_cookie($user_login) {
    if (isset($_COOKIE['visitor_zipcode'])) {
        unset($_COOKIE['visitor_zipcode']);
        setcookie('visitor_zipcode', '', time() - 3600, '/');
    }

    $user_obj = get_user_by('login', $user_login );
    $user_zipcode = get_user_meta($user_obj->ID,"shipping_postcode",true);
    if($user_zipcode == '') $user_zipcode = get_user_meta($user_obj->ID,"billing_postcode",true);
    if($user_zipcode != '') {
        setcookie('visitor_zipcode', $user_zipcode, time() + (10 * 365 * 24 * 60 * 60), '/');
    }
}
add_action('wp_login', 'add_zipcode_cookie');

请理解,为了创建会话,需要通知PHP服务器需要创建会话。换句话说,后端应该创建一个PHPSESSID cookie(其值可以根据您的要求由我们设置)

正如这里所解释的

请在服务器端使用setcookie函数


希望这对您有所帮助

您可以控制后端吗?如果是这样,在响应上设置cookie将使所有这些都成为一个无声的问题。