首页 新闻 会员 周边 捐助

js跨域请求的问题

0
悬赏园豆:10 [已解决问题] 解决于 2018-08-09 22:12

调用一个第三方api接口,按照文档要求根据appkey和timestamp,appsecret生成了加密的auth,在POSTMAN中测试没有问题,可以返回数据。

但在前端页面发出ajax请求,涉及到了跨域的问题

$.ajax({
  url: url,
  type: 'get',
  data: {
       image_url: "xxxx.jpg",
       appkey: appkey,
       auth: auth,
       timestamp: timestamp,
       lang: 'cn'
      },
  dataType: 'jsonp',
  success: function (result) {
      console.log(result);
  }
});
 
这样些返回以下错误
 
Cross-Origin Read Blocking (CORB) blocked cross-origin response https://xxxxxxxxxxxxxxx/xxxxx?callback=jQuery203024259184329991657_1533652268651&appkey=xxxxxx&timestamp=1533651720&auth=xxxxxxxxxxxxxxxxx&image_url=http%3A%2F%2Fpic18.nipic.com%2F20120204%2F9114602_104351504000_2.jpg&_=1533652268652 with MIME type application/json.
See https://www.chromestatus.com/feature/5629709824032768 for more details.
 
看错误信息好像是content type的问题,但是修改后问题依旧
请问是哪里出了问题?
问题补充:

在后台处理程序中调试成功了,但是还不知道ajax怎么调用返回。。。很郁闷,下面是我后台的代码。哪位再帮我看看ajax的jsonp怎么调用?

teagueli的主页 teagueli | 初学一级 | 园豆:75
提问于:2018-08-07 22:42
< >
分享
最佳答案
0

因为你发送的是json数据,所以是一次非简单请求。那么我们需要在服务端设置Access-Control-Allow-Headers=‘json’

收获园豆:10
道阻切长 | 菜鸟二级 |园豆:214 | 2018-08-08 08:00

我调用别人的接口,服务端没法设置啊。

对了,我后来自己写了一个ashx的一般处理程序,在这个一般处理程序里向接口发出请求,同样返回一样的错误

teagueli | 园豆:75 (初学一级) | 2018-08-08 08:22
其他回答(4)
0

贴一下postman提交的content-type内容格式以及请求方式,好知道问题一点。

ohyex | 园豆:1696 (小虾三级) | 2018-08-07 23:03

postman里显示是application/json,这个我在前台发ajax请求设置过也不管用。还有postman不是可以自动生成js代码吗,我粘贴过去也不行。

支持(0) 反对(0) teagueli | 园豆:75 (初学一级) | 2018-08-08 08:18

@寻找薛定谔的猫: 提交的data需要JSON.stringify( data),然后指定content-type为application/ json。

支持(0) 反对(0) ohyex | 园豆:1696 (小虾三级) | 2018-08-08 08:33

@hellotim: 这样写了一下,还是一样的错误。快崩溃了,搞了一整天了。

支持(0) 反对(0) teagueli | 园豆:75 (初学一级) | 2018-08-08 09:26

@寻找薛定谔的猫: jsonp只支持GET请求。

支持(2) 反对(0) ohyex | 园豆:1696 (小虾三级) | 2018-08-08 09:46
0

让API接口在返回数据的header里面(HttpServletResponse response),配合增加一个参数即可解决,如下所示:

response.setHeader("Access-Control-Allow-Origin", "*");

幸福鳥 | 园豆:206 (菜鸟二级) | 2018-08-08 10:53

这个我曾经设置过~无效

支持(0) 反对(0) 远扬 | 园豆:30 (初学一级) | 2018-08-08 17:19

@远扬: 好吧,可能是哪里不一样。在我的项目里面使用这个配置可能解决跨域的问题,你再研究一下其它的方法吧。

支持(0) 反对(0) 幸福鳥 | 园豆:206 (菜鸟二级) | 2018-08-10 09:55
0

1.你返回的不是 jsonp对象,所以报错,要创建个实体。2.末尾加上:context.response.End();表示响应结束了,不在输出了

唯我独萌 | 园豆:537 (小虾三级) | 2018-08-08 17:25
0

请问一下这个问题最后有解决吗,我也是调用第三方api服务跨域

xuhiahia | 园豆:202 (菜鸟二级) | 2022-10-17 15:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册