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 跨域和凭据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用凭据、HTTP 授权 (CORS) 使 XMLHttpRequest 跨域?