无法在跨域上使用 JSONP 发布数据

Posted

技术标签:

【中文标题】无法在跨域上使用 JSONP 发布数据【英文标题】:Unable to post data using JSONP on Cross Domain 【发布时间】:2013-09-26 20:34:51 【问题描述】:

我们有一个场景,我们需要将数据从我们的域 (x.com) 发布到不同的域 (y.com)。 y.com 上的操作归因于HTTPPost,并且可以更改。但是在使用AJAXJSONPHTTPMethod POST 将数据发布到y.com 时,请求会自动转换为HTTPMethod GET

【问题讨论】:

【参考方案1】:

JSONP 请求是 GET 请求,不能使用 POST 请求进行。如果您想发送发布请求,请查看跨源资源共享。

【讨论】:

【参考方案2】:

您不能使用JSONP 发布(查看here 和here),因为它只是doesn't work that way - 它创建一个<script> 元素来获取数据,这必须通过GET 请求完成。 JSONP方案不使用XmlHttpRequest对象,所以不是标准理解方式的AJAX请求,但内容仍然是动态访问的——对最终用户来说没有区别。

JSONP 确实可以用来克服same origin policy 的限制,但您也可以使用CORS,在现代浏览器中实现alternative 到带有Padding 的JSON。

【讨论】:

感谢您的回答。【参考方案3】:

作为一种解决方法,您可以做的是使用 postMessage 解决跨域通信,这是 html5 的一个新功能。但是,为了解决它,您需要使用 iframe,如果您不想显示某些 iframe,您可以使用 display:none css 属性创建 1x1px。 这将使您实现目标。

【讨论】:

以上是关于无法在跨域上使用 JSONP 发布数据的主要内容,如果未能解决你的问题,请参考以下文章

jQuery跨域文件上传

当dataType为JSONP时没有调用ajax成功回调函数。在跨域访问中

使用 JSONP 和 cookie 进行跨域登录

[转] 疯狂的JSONP

Jquery $.ajax 在跨域调用的 IE 中失败

在 HTTPS 上部署 laravel 项目并在跨域请求期间使用正确的 href 加载内容