【问题标题】:Use cookie from ajax post request in cross subsequent ajax get request在交叉后续 ajax 获取请求中使用来自 ajax 发布请求的 cookie
【发布时间】:2015-10-26 00:22:49
【问题描述】:

这是我使用 javascript 的第一周,我正在尝试访问需要通过发布请求进行身份验证的 api。帖子工作正常,但我不知道如何使用 get 请求发送 cookie。

编辑2:

我把成功函数改成:

success: function(data, status, xhr);

更接近文档。从 console.log(data, status, xhr) 返回以下内容:

对象 {readyState: 4, responseText: "{"value":{"publisher":{"active":"1","publisher_id":"######"}}}", responseJSON:对象,状态:201,状态文本:“已创建”}

也许这可以为外面的人澄清一些事情?

到目前为止,这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="jquery-2.1.4.min.js"></script>
    <script>
        $(function() {
            $.ajax({
                url: "https://publisher-api.com/1.0/Publisher/Login", 
                type:"POST",
                data: {"username":"######","password":"@@@@@@"}, 
                dataType: "json",
                success: function(response) {
                    console.log(response);
                }
            });
            $.ajax({
                url: "https://publisher-api.com/1.0/Publisher(######)/Channels/RevenueReport",
                type: "GET",
                dataType: "json",
                success: function(data) {
                    console.log(data);
                }
            });
        });
    </script>
</head>
<body>
</body>
</html>

【问题讨论】:

    标签: javascript jquery ajax cookies


    【解决方案1】:

    试试这个:

    $.ajax({
        url: "https://publisher-api.com/1.0/Publisher(######)/Channels/RevenueReport",
        type: "GET",
        dataType: "json",
        xhrFields: {
            withCredentials: true
        },
        success: function(data) {
            console.log(data);
        }
    });
    

    【讨论】:

    • 它会抛出以下错误:XMLHttpRequest cannot load publisher-api.com/1.0/Publisher(######)/Channels/RevenueReport。当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。因此,不允许访问 Origin 'null'。
    • 凭据也必须在您的服务器端启用,但似乎它们未启用(* 用于Access-Control-Allow-Origin 标头)-您确定您的 API 可以用于方式?
    • 我不确定,但会发现,是否有另一种使用/访问 api 的常用方法我可以尝试,或者我应该先确保在服务器端启用凭据?
    • 好吧,我不确定您的 API 究竟是如何工作的,但您能否尝试删除 xhrFields 属性并将 dataType 更改为 jsonp
    • 好吧,你应该联系他们并询问是否有办法处理将setCredentials 设置为true 的请求。
    【解决方案2】:

    问题在于 ajax 调用是异步的,因此第一个仍在等待响应,第二个也已启动。

    如果我了解您想要做什么(通过帖子获取 cookie,然后在 get 中使用 cookie),您将需要嵌套 ajax 调用。所以

    <!DOCTYPE html>
    <html>
    <head>
        <script type="text/javascript" src="jquery-2.1.4.min.js"></script>
        <script>
            $(function() {
                $.ajax({
                    url: "https://publisher-api.com/1.0/Publisher/Login", 
                    type:"POST",
                    data: {"username":"######","password":"@@@@@@"}, 
                    dataType: "json",
                    success: function(response) {
                      $.ajax({
                        url: "https://publisher-api.com/1.0/Publisher("+ response.cookie +")/Channels/RevenueReport",
                        type: "GET",
                        dataType: "json",
                        success: function(data) {
                            console.log(data);
                        }
                      });
                    }
                });
    
            });
        </script>
    </head>
    <body>
    </body>
    </html>
    

    假设来自第一个 ajax 调用的响应包含 cookie。

    【讨论】:

    • URL 中的Publisher(######) 是post请求返回的帐号,但我不确定cookie是如何返回的
    • 嵌套调用似乎没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2011-06-08
    • 2021-08-15
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多