为什么$ .post()受同源策略的约束,但是使用method =’POST’提交表单好吗?

我正在开发一个基于网络的工具,它简化了我们在办公室所做的工作。 我们的合作伙伴提供给我们的工具有一个我们整个楼层使用的通用登录,但它每30分钟就会超时一次,这对于整天必须再次登录很烦人。

我过去所做的是在我的工具中创建一个隐藏的iframe,通过在页面加载时提交隐藏的表单来登录它,并继续每30分钟提交一次表单以防止超时。 然后,他们可以直接从我的工具(通过另一个可见的表单)向合作伙伴工具提交搜索。

我想使用jQuery $.post()来消除隐藏的iframe,并使其成为唯一一次提交登录信息的时间是在进行搜索时。 这样,它不会在不使用时不断发送请求,但您仍然可以运行搜索而无需担心登录超时。

似乎ajax同源策略阻止了这一点,所以目前我只是打开一个新的命名窗口,然后一个接一个地在目标窗口中提交两个隐藏的表单。

这样做的问题是,如果登录请求尚未完成,则搜索请求不会通过,并且它们将再次进入登录页面。 如果他们关闭窗口并再次搜索它会起作用,但这也很烦人,只是没有原始情况那么多。

除了你实际上必须看到页面打开(除非它在隐藏的iframe中)之外,通过$.post()提交参数和使用POST方法提交表单之间的区别是什么? 它们在萤火虫中看起来相同。 有什么办法可以在表单提交上设置回调,所以它等待第一个请求在开始第二个之前完成吗?

$ .post使用xmlhttprequest发送数据。 Xhr受同源政策的限制。 发送直接HTTP POST请求不是。

对其他域执行POST请求时,您将无法使用JavaScript访问响应(即使您将表单提交给iframe)。

但是,当使用XHR时,您可以完全访问响应,因此您可以做许多不好的事情 – 例如访问用户登录的页面,窥探他的公司内部网等。

因此,XHR限制不是为了避免CSRF,而是为了避免泄露特权信息。

ajax同源策略是停止通过网络将您的信息发送到他们的个人服务器,而不会意识到它正在发生。 建议不要将页面post发送到其他服务器,否则可能会失败。

你能解决吗? 您可以使用jq替换表单submit以等待登录状态完成,然后提交表单,但是,我不确定这是一个好主意 – 旋转循环通常表示设计错误。

你有多少控制代码? 你可以让提交登录,并在返回时发送搜索? 或者使搜索不需要登录?