【问题标题】:Send post to a different domain using JS使用 JS 将帖子发送到不同的域
【发布时间】:2011-07-05 00:41:09
【问题描述】:

我希望在更改某个文本输入字段后使用 javascript 发送一个发布请求。

这是我当前的代码:

<input name="message" onchange="$.ajax({type: \"POST\", url: \"http://example.com/example.php\", data: \"message=\" + document.getElementsByName(\"message\")[0].value});" />

现在,它可以在常规连接上运行,但不能在安全连接 (SSL) 上运行。 我的意思是,该页面是安全的,但请求被发送到非安全页面。

有解决办法吗?

【问题讨论】:

  • 发送不是问题。只接收。
  • 非常正确,但我认为既然他在做 ajax,他也希望收到?
  • @kjy112:这很可能,但问题中没有说明(还)。 ;)
  • @FelixKling 你是对的。假设从来都不是一件好事=/
  • 如何提交表格?作为 Ajax 还是作为“正常”请求?如果您执行正常请求,即浏览器被重定向到新的(或相同的)站点,那么最好在服务器端进行对另一个域的调用。

标签: javascript ajax same-origin-policy


【解决方案1】:

正如 David 指出的那样,由于同源策略的(相当明智的)限制,不可能对另一个域上的服务执行异步 POST。 JSON-P 之所以有效,是因为您可以在 DOM 中插入标签,并且它们可以指向任何地方。

您可以使用 JSONP 进行带 GET 的跨域 AJAX:JSONP CrossDomain

它还介绍了如何使用 jQuery 执行 JSONP

同源策略防止从一个源加载的文档或脚本从另一个源获取或设置文档的属性。如果两个页面的协议、端口和主机相同,则认为两个页面具有相同的来源。 http://rj3.net/mdc/sop

确保您在 ajax url 中指定 ssl,当您的页面的其余部分也使用 ssl 时,例如 https

您不能将其从 https 发送到 http 站点。任何 https 资产(html 或其他)只能由同一域/ssl 证书上的某些东西访问。所以,你将无法做你想做的事情(https 到 http)。因此,由于您的页面是在 https 上提供的,因此目标 http 站点由于政策而无法访问它

【讨论】:

  • 该页面关于使用 JSON-P 的所有内容都是使用 GET 方法完成的。该问题要求 POST。
  • @David Dorward:嗯,一方面,无论如何服务器必须支持 JSONP。另一方面,没有什么反对将 JSONP 与 POST 请求一起使用。文章在其示例中使用 GET 并不意味着不能使用 POST。
  • 其实就是这个意思。 JSON-P 的工作原理是让第三方站点上的脚本(使用&lt;script src&gt; 导入)调用由第一方站点定义的函数。无法使用 POST 请求导入脚本(除非您先执行 XHR 之类的操作,然后执行 eval 它 - 但无法访问第三方站点)。
  • 完全没有看到 OP 严格执行 POST 抱歉。
  • @David Dorward:抱歉。我对 JSONP 有一个稍微错误的想法。当然,脚本的检索不能通过 GET 完成。不知何故,我认为涉及另一个请求,我的意思是这是一个 POST 请求......没有难过的感觉!
【解决方案2】:

将表单的目标属性设置为指向隐藏的 iframe。

您将无法阅读响应,但您可以提出请求。

如果你想阅读响应,你需要通过你自己的服务器代理请求。

【讨论】:

  • 我不是这个意思。我希望表单能够正常发送,同时向另一个域发出 ajax post 请求(发送即可,我不需要阅读响应)。
  • @Lior 所以你基本上想同时发送表单并发布到另一个域?类似于 php 的 cURL?
  • 提交表单,给它一些时间通过,然后改变表单的目标并调用它的submit()方法。
  • 这有点冒险。我认为服务器端解决方案更好服务
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多