JQuery $.post 跨域和凭据

Posted

技术标签:

【中文标题】JQuery $.post 跨域和凭据【英文标题】:JQuery $.post cross domain and credentials 【发布时间】:2014-11-18 18:42:45 【问题描述】:

我编写了一个 Web 应用程序,它使用大量的 $.post 调用和 JQuery。现在我想发送withCredentials: true 以保持会话处于活动状态,$.ajax 中看起来像这样(并且也像这样工作):

$.ajax(
            type: 'post',
            url: 'http://example.com/server/api.php',
            crossDomain: true,
            dataType: "json",
            xhrFields: 
                withCredentials: true
            ,
            data: 
                username : 'test',
                password : 'test'
            ,
            success: function (d) 
                $('body').html(d.status);
            
        );

这是因为我现在想将 PHP 文件上传到我的服务器并使用 Cordova 导出客户端。 (withCredentials: true 仅包含在我的本地主机服务器上进行测试) 我可以将其打包到$.post 电话中还是需要替换所有电话? (我会编写一个类似于 $.post 的新函数)

【问题讨论】:

问题是?? 复制:***.com/questions/16689496/… @ZeeTee 链接到没有标记正确答案的问题是意思:P 看第一个答案,答案很清楚。 @ZeeTee 这不是重复的,因为我想要会话凭据,而另一个线程想要基本身份验证 【参考方案1】:

您可以使用jQuery.ajaxSetup() 设置每个ajax 请求将使用的默认选项(包括$.post$.get

$.ajaxSetup(
    crossDomain: true,
    xhrFields: 
        withCredentials: true
    ,
    username: 'test',
    password: 'test'
);

$.post('http://example.com/server/api.php', 
    username: 'test',
    password: 'test'
, function (d) 
    $('body').html(d.status);
, 'json');

还有关于此 API 的警告

注意:此处指定的设置将影响对 $.ajax 或 基于 Ajax 的衍生产品,例如 $.get()。这可能会导致不受欢迎的 行为,因为其他调用者(例如,插件)可能期待 正常的默认设置。出于这个原因,我们强烈推荐 反对使用此 API。相反,在 调用或定义一个简单的插件来做到这一点。

来自 jQuery 文档

【讨论】:

我已经试过了,现在它可以工作了,因为我把它放在文件的末尾而不是开头

以上是关于JQuery $.post 跨域和凭据的主要内容,如果未能解决你的问题,请参考以下文章

Safari 阻止 URL 请求凭据,因为它是跨域请求

如何使用凭据、HTTP 授权 (CORS) 使 XMLHttpRequest 跨域?

fetch跨域发送带凭据的请求

授权请求标头与凭据的 POST 请求正文

在 CORS 中,是不是已预先发送带有凭据的 POST 请求?

在 CORS 中,是不是已预先发送带有凭据的 POST 请求?