使用Ajax请求设置Cookie

时间:2014-01-18 23:04:36

标签: javascript php jquery ajax cookies

我有一个带有表单的php页面,它有一个按钮。单击该按钮时,将运行一个jquery函数,该函数执行一些验证测试,然后使用ajax提交表单。在由ajax运行的php脚本中,设置了一个cookie。在设置cookie之后,我立即尝试获取cookie值,我从脚本回显并在ajax请求的成功函数中吐出。 cookie值尚未设置。

代码如下。

mainpage.php

<script type="text/javascript">
    $( document ).ready(function()
    {
        $('#submit_compare_stage1').click(function()
        {
            //Validation stuff

            if (passed_validation)
            {
                var form_data = $('#compare_form').serialize(); //Collect query details into a form

                $.ajax({
                    type: "POST",
                    url: "scripts/process_compare.php",
                    data: form_data,

                    success: function(data)
                    {
                        alert(data);
                    },

                    error: function(jqXHR, textStatus, errorThrown)
                    {
                        //Error stuff
                    }
                });
            }

            return false;
        });
    });
</script>

<form name="compare_form" id="compare_form" action="">              
    ....

    <button id='submit_compare_stage1' name='submit_compare_stage1'>Next</button>
</form> 

process_compare.php

<?php
    //MySQL Stuff

    makeCookie('cs', '2');

    echo 'hi' . getCookie('cs', false);

    echo "success";

    function makeCookie($name, $contents, $length = 3600)
    {
        // Create a new cookie
        setcookie($name, $contents, time() + $length, '/');
    }

    function getCookie($name, $delete = true) 
    {
        // Return the contents of a cookie and delete it if requested

        $contents = $_COOKIE[$name];

        if($delete) {
            setcookie($name, '', time() - 3600, '/');
            setcookie($name, '', time() - 3600);
        }

        return $contents;
     }
?>

ajax请求正在发布提示“hisuccess”的警报消息,因此未设置cookie。

我不确定是不是因为页面需要刷新或其他东西,但我知道当我们使用action =“/ process_compare.php”定期提交表单时使用的代码以及要放置的iframe结果成。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

将Cookie作为响应的标头发送。在data参数中,您获得响应的主体,而不是标题。

看来,来自getResponseHeader()MDN - getAllResponseHeaders()的回复标题不包含Set-Cookie标题。

但是浏览器会透明地处理cookie。因此,为了访问cookie,您可以使用document.cookie属性

$.ajax({
    ...
    success: function(data, status, jqxhr) {
        var cookies = [];
        if (document.cookie)
            cookies = document.cookie.split('; ');

        // do something with the cookies
    },
});

或使用jQuery Cookie提供的github插件。