比如在本地打架的服务器127.0.0.1:80,通过jquery的ajax或者script的src获取,比如获取https://www.baidu.com/,或者https://www.taobao.com/ 主页html里面内容,请大神怎么解决呢?

解决方案 »

  1.   

    去看看jsonp的加载形式
      

  2.   

    <!doctype html>
    <html>
     <head>
       <meta charset="utf-8">
       <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
       <title>proxy_test</title>
       <style type="text/css">
       #box{
       width:100px;
       height: 100px;
       background:red;
       }
       </style>
       <script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
     </head>
     <body>
     <div id="box"></div>
     <script type="text/javascript">
      $('#box').on('click',function(){
      $.ajax({
      type:'get',
      url:'http://www.hpmplay.com/index.html',
      dataTypa:'jsonp',
      jsonp:'callback',
      success:function(data){
      console.log(data)
      }
      })
      })
     </script>
     </body>
    </html>会报错XMLHttpRequest cannot load http://www.hpmplay.com/index.html. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1' is therefore not allowed access.
      

  3.   

    用jsonp方式加载的地址必须返回jsonp格式的数据
    callback({”xxxxx“:123,"yyyy":456})不能是html或者其它格式的数据,也不能是json格式的  ,必须是jsonp格式的数据
      

  4.   

    那为什么url:'https://code.jquery.com/jquery-3.2.1.min.js',是这个就不报错呢?
      

  5.   

    <!doctype html>
    <html>
     <head>
       <meta charset="utf-8">
       <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
       <title>proxy_test</title>
       <style type="text/css">
       #box{
       width:100px;
       height: 100px;
       background:red;
       }
       </style>
       <script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
     </head>
     <body>
     <div id="box"></div>
     <script type="text/javascript">
      $(function(){
      $.ajax({
      type:'get',
      url:'http://www.hpmplay.com/',
      dataType:'jsonp',
      jsonp:'callback',
      success:function(jsonp){
      alert(jsonp)
      }
      })
      })
     </script>
     </body>
    </html>现在报错Uncaught SyntaxError: Unexpected token <
      

  6.   


    其实jsonp的原理就是先声明一个回调函数callback,并创建一个 script标签,用这个script标签加载你提供的地址,这就要求地址返回的是js代码。不是js代码当然就出错了。

    callback({"xxxx":123,"yyyy":456})
    这个js代码就是jsonp的格式。执行事先声明的callback函数,并通过函数的参数传递数据。
      

  7.   

    指定了dataType是jsonp,那么取到的返回数据的一定要是js代码: xxxx(data); 就是调用预先定义在页面的函数,不能是HTML代码。
    跨域取内容最好还是用服务器端代理的方式,在服务器端去读取跨域的内容,再返回给自己的客户端。
      

  8.   

    你跨域百度或者淘宝只能自己服务器端做代理了,没设置Access-Control-Allow-Originhttp://www.w3dev.cn/article/20130830/ajax-cross-domain-request-control-by-Access-Control-Allow-Origin.aspx允许你跨域请求,不能用ajax请求跨域页面,也没提供jsonp数据如果页面支持get请求,可以用qyl转为jsonp的
    JSONP跨域访问在线代理API