跨域请求返回错误消息

yaotomo 2018-08-07 02:19:20
调用一个第三方接口,在postman中测试没有问题
但是在chrome中访问报错


Cross-Origin Read Blocking (CORB) blocked cross-origin response https://xxxxxx.com/v2/item/identification?callback=xxxxx3&image_url=xxxxxxx2.jpg&appkey=xxxxxx&auth=xxxxxxxx×tamp=1533621700&lang=cn&_=1533622407154 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details


js调用代码

$.ajax({
url: url,
type: 'post',
data: {
image_url: "xxxx.jpg",
appkey: appkey,
auth: auth,
timestamp: timestamp,
lang: 'cn'
},
dataType: 'jsonp',
success: function (result) {
console.log(result);
}
});


看网上的一些方法,修改ajax请求的content-type也不行啊
...全文
1261 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mars铭 2019-01-07
  • 打赏
  • 举报
回复
@yaotomo 是怎样解决的?
yaotomo 2018-08-09
  • 打赏
  • 举报
回复
谢谢各位,写后台代码解决了
forwardNow 2018-08-09
  • 打赏
  • 举报
回复
同源策略是浏览器搞出来的东西,所以才会有所谓的跨域;
至于 postman,这个不是浏览器,没有同源策略,不会发送预检请求(你这种情况应该是在这里挂了),不会在拦截真正的Ajax请求。

要求第三方应该是做不到了,但是你可以在你的服务端发送 HTTP 请求第三方获取数据然后转发给你,
也就是说,你请求 你的服务器,让你的服务器去请求第三方的数据。
風灬雲 2018-08-08
  • 打赏
  • 举报
回复
引用 14 楼 yaotomo 的回复:
[quote=引用 11 楼 qq_41114603 的回复:]
可以试试js中创建script标签把处理后的url放上去后再把标签丢到页面中去加载


动态生成还是报原来的错误

var jsonp = document.createElement("script");
jsonp.type = "text/javascript";
jsonp.src = url + "?callback=jsonpCallback&image_url=" + image_url + "&appkey=" + appkey + "&auth" + auth + "×tamp=" + timestamp;
document.getElementsByTagName("head")[0].appendChild(jsonp);
[/quote]

直接在浏览器上输入你编辑后的url,看看有没有数据出来,要是jsonp的话,会是js里面函数执行的格式callback(data),如果不是这种格式就不是jsonp
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 11 楼 qq_41114603 的回复:
可以试试js中创建script标签把处理后的url放上去后再把标签丢到页面中去加载


动态生成还是报原来的错误

var jsonp = document.createElement("script");
jsonp.type = "text/javascript";
jsonp.src = url + "?callback=jsonpCallback&image_url=" + image_url + "&appkey=" + appkey + "&auth" + auth + "×tamp=" + timestamp;
document.getElementsByTagName("head")[0].appendChild(jsonp);
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 11 楼 qq_41114603 的回复:
可以试试js中创建script标签把处理后的url放上去后再把标签丢到页面中去加载


参数动态生成后,放到script标签里,怎么让这个script标签生效?

另外,api接口的协议是https,我本地是http,是不是有影响?
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 10 楼 jslang 的回复:
你这返回的数据格式是json,不是jsonp啊


8#说webapi接口,是支持跨域的,不需要jsonp
我也搞不懂了
到底是用jquery发ajax请求,类型设置为jsonp,还是用script标签引用(没有提供接口js可以调用,只有个api的url?)
風灬雲 2018-08-07
  • 打赏
  • 举报
回复
可以试试js中创建script标签把处理后的url放上去后再把标签丢到页面中去加载
天际的海浪 2018-08-07
  • 打赏
  • 举报
回复
引用 9 楼 yaotomo 的回复:
[quote=引用 8 楼 foren_whb 的回复:]
如果是第三方webapi接口,应该是支持跨域的,不需要jsonp

不然就不叫第三方webapi接口了


但是我将dataType改为json报错不能跨域访问
奇怪的是在postman模拟post请求是可以正常返回结果的

[/quote]
你这返回的数据格式是json,不是jsonp啊
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 8 楼 foren_whb 的回复:
如果是第三方webapi接口,应该是支持跨域的,不需要jsonp

不然就不叫第三方webapi接口了


但是我将dataType改为json报错不能跨域访问
奇怪的是在postman模拟post请求是可以正常返回结果的

丰云 2018-08-07
  • 打赏
  • 举报
回复
如果是第三方webapi接口,应该是支持跨域的,不需要jsonp

不然就不叫第三方webapi接口了

yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
jsonp实际上是利用<script>标签加载数据。type只能是GET方式,不能是POST方式。


谢谢海浪前辈!!!
我想起来以前调用百度地图时确实都是添加了script标签的,而且连接的脚本后还有百度开发的ak值
可是对方只给了我一个调用api的 url,和要传的参数及格式,auth 的计算公式 md5($appkey+$timestamp+$appsecret),我怎么通过script标签去调用啊?
我把jquery的ajax请求type改成get还是原来的错误
小白没怎么用过jsonp请老师指点
天际的海浪 2018-08-07
  • 打赏
  • 举报
回复

jsonp实际上是利用<script>标签加载数据。type只能是GET方式,不能是POST方式。
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
引用 3 楼 foren_whb 的回复:
dataType: 'jsonp',

这句去掉


跨域就应该用jsonp吧,如果去掉是会报错的
丰云 2018-08-07
  • 打赏
  • 举报
回复
dataType: 'jsonp',

这句去掉
yaotomo 2018-08-07
  • 打赏
  • 举报
回复
上面已经贴出错误文本了
我再截个图吧,看得清楚些




引用 1 楼 qq_34309305 的回复:
把你chrome报的错误贴出来啊要不然不好分析
75闪光雷 2018-08-07
  • 打赏
  • 举报
回复
把你chrome报的错误贴出来啊要不然不好分析

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧