jsonp跨域请求,没反应

api:http://mylance.top/api/getHom...
api怎么看出来用跨域还是非跨域...

        function refreshSwipe(data){
            console.log(data);
        }
        function getSwipe(){
            var 
                js = document.createElement('script'),
                head = document.getElementsByTagName('head')[0];
            js.src = 'http://mylance.top/api/getHomeInfo?callback=refreshSwipe';
            head.appendChild(js);
        }

跨域请求了一下,network里根本没有显示这个请求。

function success(text){
            var banner = text;
            console.log(banner);
        }
        function fail(status){
            console.log(status)
        }
        let request = new XMLHttpRequest();
        request.onreadystatechange = function(){
            if (request.readyState === 4 && request.status === 200) {
                    return success(request.responseText);
            }else{
                return fail(request.status)
            }
        }
        request.open('GET','http://mylance.top/api/getHomeInfo');
        request.setRequestHeader('Accept','application/json');
        request.send();

非跨域请求,显示错误XMLHttpRequest cannot load http://mylance.top/api/getHom... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'file://' is therefore not allowed access.
network里status为200,响应数据不可用。
所以还是要用jsonp?那上面的代码错在哪里

阅读 4.4k
2 个回答

用jsonp跨域请求,返回json格式是callback({...});而不是直接一个json,所以通过自己服务器的php或python调用再返回给前端吧

clipboard.png

由下图明显可知,这个接口并不支持JSONP

关于JSONP,请查阅 http://www.runoob.com/json/js...

图片描述

图片描述


JSONP的正确返回格式:

/**/ typeof fn === 'function' && fn({"data":{"province":"广东","city":"珠海","areacode":"0756","zip":"519000","company":"中国联通","card":"联通130卡"},"status":{"code":200,"message":""}});

来源: https://bird.ioliu.cn/mobile?...


补充:

可跨域的请求,一般在响应头(Response Headers)里有个Access-Control-Allow-Origin:*项,设置了允许访问的域名,*则为允许所有

可看下图:
图片描述


最后,ajax请求须在服务器环境,单文件file://打开是没法请求的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用