【问题标题】:Setting Cookie with Ajax Request使用 Ajax 请求设置 Cookie
【发布时间】:2014-02-08 06:23:04
【问题描述】:

我有一个带有一个按钮的 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 定期提交表单时,代码可以正常工作结果成。

有人可以帮忙吗?

【问题讨论】:

  • 如果生成了任何 cookie,您是否尝试过简单地运行脚本(服务器端)?
  • 对不起,我不明白。它肯定在运行脚本,因为它正在打印 echo 'success' 位。
  • 我的意思是你的 process_compare.php 直接没有 ajax 并尝试回显 cookie 如果它在那里。您正确设置为 / 的路径应该可以跨域访问。
  • 你为什么还在使用cookies?

标签: javascript php jquery ajax cookies


【解决方案1】:

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
    },
});

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

【讨论】:

  • 好的,我想我明白了。那么我需要在我的 ajax 代码中添加什么,以便以后程序的其余部分可以读取 cookie?
  • 非常感谢奥拉夫 :)
  • 对不起,当我实际测试它时,变量 cookie 返回 null :(
  • @PippaRoseSmith 我自己对此进行了测试,可以确认缺少的 cookie 标头。现在,我看到的唯一方法是使用document.cookie,请参阅更新的答案。
  • 谢谢,我不知道为什么会这样,但确实有效:)
猜你喜欢
  • 2017-12-04
  • 2021-12-28
  • 2017-08-05
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
相关资源
最近更新 更多