使用 POST 向 JSONP 请求发送数据

Posted

技术标签:

【中文标题】使用 POST 向 JSONP 请求发送数据【英文标题】:Send data using POST to JSONP request 【发布时间】:2016-05-30 09:17:27 【问题描述】:

总结:

想要使用 POST 方法将数据发送到另一个域到 JSONP。

代码:

$http.jsonp($scope.baseApiUrl+'QueryBuilder/getData?callback=JSON_CALLBACK')
.success(function(data, status, headers, config) 
    $scope.success = true;
    console.log(data);
).error(function (data, status, headers, config) 
    $scope.error = true;
);

它工作正常。但是我有很多数据需要发送到服务,跨域,并且太大而无法通过查询字符串发送。所以我想把它作为 JSON 发送。

data: 
    "dbName":"test",
    "tables":["city","persons"],
    "filters":["city_id='Hyd'"]

调查结果:

How to make a jsonp POST request that specifies contentType with jQuery?Unable to post data using JSONP on Cross DomainHow to send data using JSONP from localhost to domain.comUsing PUT/POST/DELETE with JSONP and jQuery

每个帖子都表明这是不可能的。那么有没有其他方法可以做到这一点?

问题:

是否可以将数据发布到 JSONP?还是所有数据都必须作为 GET 请求在查询字符串中传递?

任何直接的帮助都将是非常可观的。谢谢。

【问题讨论】:

另见:How do I send a cross-domain POST request via javascript?。这是一个基于那个问题的demo,它使用 iframe 发布 json 跨域。 【参考方案1】:

是否可以将数据发布到 JSONP?

不,不是。

JSONP 通过添加一个<script> 元素来工作,该元素从其src 获取 数据(数据嵌入在JavaScript 程序中)。您不能发出 POST 请求来加载 JavaScript 程序。

或者是否所有数据都必须作为 GET 请求在查询字符串中传递?

是的


JSONP 是一种绕过同源策略的肮脏技巧。

CORS 是作为绕过同源策略的标准方式引入的,这种方式更加灵活。如果得到 CORS 的授权,您可以使用 XMLHttpRequest 发出 POST 请求。请改用 CORS。

【讨论】:

感谢您的回答。但是有没有其他方法可以做到这一点? @RohitJindal — CORS 是另一种方式。 通过使用 CORS,我可以将数据作为 POST 发送,而不会出现跨域问题。? @RohitJindal — 来自答案:“如果 CORS 授权,您可以使用 XMLHttpRequest 发出 POST 请求”

以上是关于使用 POST 向 JSONP 请求发送数据的主要内容,如果未能解决你的问题,请参考以下文章

jquery跨域发送Post请求该怎么处理

如何使用 jQuery 创建一个指定 contentType 的 jsonp POST 请求?

如何在使用 AFHTTPSessionManager 发送 POST 请求时向参数发送空白数据

QNetworkAccessManager 未发送 POST 请求的数据部分

使用Script元素发送JSONP请求

使用 jQuery 1.5 将请求作为 jsonp 发送,将响应解释为文本