jQuery跨域问题解决方案

  通过XMLHTTPRquest请求不同域上的数据,原来js跨域访问是后台有个处理路径“/test”的函数。下面把具体解决方案介绍如下。

  后台处理路径“/test”的函数:

  

复制代码 代码如下:

  //路径处理

  app.get("/test",user.test);

  //处理函数

  exports.test=function(req,res){

  res.end("alert('JS跨域访问')");

  };

  外部有一个网页需要访问路径”/test“下的内容,则可以通过JS脚本文件来跨域访问:

  

复制代码 代码如下:

  //处理函数

  <script>

  function method(data){

  console.log(data);

  }

  </script>

  //跨域访问

  <script src="http://localhost:3000/test"></script>

  结果会在当前的网页中弹出一个窗口:

jQuery跨域问题解决方案

  jQuery中JSONP跨域访问的实现:

  同样在后台有一个处理路径“/test”的函数:

//路径处理
app.get("/test",user.test);
//处理函数
exports.test=function(req,res){
 res.end("method("+JSON.stringify({mes:"跨域访问成功!"})+")");
};
 外部有一个网页需要访问路径”/test“下的内容,通过JSONP来实现跨域访问:

//引入跨域访问中的jQuery函数库
<script src="http://localhost:3000/js/jquery-1.9.1.min.js"></script>
//jQuery中JSONP跨域访问
<script>
  $.ajax({
    url:"http://localhost:3000/test",
    type:"get",
    success:function(data){
      $("body").append(data.mes);
    },
    dataType:"jsonp",
    jsonpCallback:"method"
  });
</script>

  结果会在当前的网页中显示如下信息:

jQuery跨域问题解决方案

  通过上述代码我们可以看出JSOPN跨域访问和原始的JS跨域访问的不同之处是JSONP不需要写处理跨域访问的函数(例如上述方法中使用的method函数),在JSONP跨域访问时会自动帮我们创建处理跨域访问的函数。

  JSONP跨域访问的优点:

  1.它不像XMLHTTPRequest对象实现的AJAX请求那样受到同源策略的限制;

  2.它的兼容性更好,不需要XMLHTTPRequest或ActiveX的支持;

  3.在请求完成后可以通过调用callback的方法传回结果。

  JSONP跨域访问的缺点:

  1.它只支持GET请求而不支持POST及其他类型的请求;

  2.它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。