ajax跨域获取数据

sunkejava 发布于 2018/05/11 15:46
阅读 248
收藏 0

现有一API接口,使用jsonp调用该接口,返回格式依然为json格式不是函数类型,所有无法获取数据,请问各位大佬还有没有其他的解决办法,网上搜有人用getjson可以解决,但是测试依然报错,求助,API地址为:http://cdn.apc.360.cn/index.php?c=WallPaper&a=getAllCategoriesV2&from=360chrome,请各位大佬指正
 

加载中
0
kakai
kakai

服务端解决方案,就是在响应头中写入如下几个参数:

Access-Control-Allow-Origin    值为 "*"或者其它域名
Access-Control-Allow-Methods    值为"GET,POST,OPTIONS,DELETE,PUT,HEAD"
Access-Control-Allow-Credentials    值为"true"

sunkejava
sunkejava
就是不想用服务端处理,想在客户端处理
0
进入休眠期
进入休眠期

当前的解决方案,跨域请求都需要服务端配合的,jsonp方式,是需要服务器支持的,你这个接口,服务器有特别的参数或者请求头指定返回类型吗,或许有指定jsonp返回类型的方法,如果可以修改服务器的话,楼上的方法就可以加CORS跨域,不需要对接口数据进行更改,如果服务器不支持,只能加中转服务器了

0
风吹屁屁凉
风吹屁屁凉

如果是你调用他们的接口,让他们改成jsonp挺难的,你可以从JAVA代码中请求接口,然后再把数据返回给前端就行了

0
s
stormh

自己在服务端封一层,绕过跨域;其他方式都不太好使,页面是人家的,也不能通过变更页面参数和内容来绕过跨域

0
溪涧顽石
溪涧顽石

反向代理走起

upstream apachephp  {
    server cdn.apc.360.cn:80;
}

server {
    listen 80;
    server_name  apc.360.1008.com;
 
    access_log  /var/log/nginx/apc.360.access.log;
    error_log  /var/log/nginx/apc.360.error.log;
    root   html;
    index  index.html index.htm index.php;
 
    location / {
        proxy_pass  http://apachephp;
        proxy_redirect     off;
        proxy_set_header   Host             cdn.apc.360.cn;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
	
	add_header Access-Control-Allow-Origin *;
	add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT,HEAD;
	add_header Access-Control-Allow-Credentials true;
   }
}


# 这个接口  360 有检查其他的头信息  curl 不过的,用浏览器玩儿

 

0
Mothpro
Mothpro

如果api服务器不在你那儿,可以尝试楼上的反向代理方案,如果api服务器是你自己的,可以修改服务端,修改的方式参照顶楼是没问题的,但是唯一要注意的是,服务端在吐数据的时候,一定要带上callback,因为jsonp的格式是由一个【回调函数调用一串json】组成,如:callback( {json} )  

0
sunkejava
sunkejava

引用来自“溪涧顽石”的评论

反向代理走起

upstream apachephp  {
    server cdn.apc.360.cn:80;
}

server {
    listen 80;
    server_name  apc.360.1008.com;
 
    access_log  /var/log/nginx/apc.360.access.log;
    error_log  /var/log/nginx/apc.360.error.log;
    root   html;
    index  index.html index.htm index.php;
 
    location / {
        proxy_pass  http://apachephp;
        proxy_redirect     off;
        proxy_set_header   Host             cdn.apc.360.cn;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
	
	add_header Access-Control-Allow-Origin *;
	add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT,HEAD;
	add_header Access-Control-Allow-Credentials true;
   }
}


# 这个接口  360 有检查其他的头信息  curl 不过的,用浏览器玩儿

 

无法修改服务端,除了自己单独写个服务中转处理,就剩代理了,坑爹那!!

溪涧顽石
溪涧顽石
回复@sunkejava : 服务中转也是把请求往后放,本质上个反向代理一样~ 一个是配置,一个是自己写~ 还不如撸个反向代理安生.
kakai
kakai
很多服务都需要负载均衡,加个代理你还可以顺便把负载均衡做了,哈哈。
返回顶部
顶部