js实现跨域的方法

由于同源策略的限制,XMLHttpRequest只允许请求当前源(包含域名、协议、端口)的资源。

json与jsonp的区别:
    JSON是一种数据交换格式,而JSONP是一种依靠开发人员创造出的一种非官方跨域数据交互协议。

script标签经常被用来加载不同域下的资源,可以绕过同源策略。(有src属性的都可以获取异域文件)。
如果请求的这个远程数据本身就是一段可执行的js,那么这些js会被执行(相当于eval)。
    
方法一:
利用script标签请求(<script src="http://....jsp?callback=回调函数名"></script>)
在使用script标签请求前,先进行回调函数的申明调用,
    <script>
        function 回调函数名(data数据){   。。。。 }
    </script>
    <script src="http://....jsp?callback=回调函数名"></script>

使用JSON来传递javascript对象是一种最简单的方式了,这样的跨域通讯方式称为JSONP。
    
    远程服务器拼凑字符串:
        回调函数名( {"name1":"data1","name2","data2"} )
    这种以后台拼凑json数据,利用回调函数传参的形式返回给客户端
    (可以直接调用相当于已经将获取的字符串进行eval了处理)
    例如:function databack(data){ alert(data.name1) }  // 会输出显示"data1"

方法二:
jquery实现异域加载方法更为简单(与ajax异步请求方式相同)
    $.ajax({
        type : "get",
        dataType:"json",
        success : function(data){ alert(data.name1) };
    })
    或者简写形式
    var url = "http://.....jsp?callback=?"; // 在jquery中此处的callback值可以为任意,因为

jquery进行处理后都是利用success回调函数进行数据的接受;
    $.getJSON( url, function(data){ alert(data.name1) });

方法三:
ajax跨域之服务端代理
    在同源的后台设置一个代理程序(proxy.jsp...);在服务器端与异域的服务器交互。
    
    jquery前台传输数据:
        例如:
      $.get(
          ‘http://。。。.jsp‘,    // 代理程序地址
          {
              name1 : "data1",
              name2 : "data2"
          },
          function(data){
          if(data == 1) alert(‘发送成功!‘);
          }
      );
    
    后台数据的处理 :
        String data1 = request.getParameter("name1");
        ........
        // 此处的url为另一域下的地址并带有参数
        String url = "http://.....com/.../sss.jsp?" + "name1=" + data1+ "name2=" +

data2;
        // 跳转到另一个域进行数据的处理并返回json格式的数据
        request.getRequestDispatcher(url).forward(request,response);

方法四:
    利用iframe标签的src属性,进行跨域的访问,将获取到的值存储到当前的iframe中,然后再

同一页面进行获取该iframe的body内的值。
    <body>
        <div id="show"></div>
        <iframe id="frame" style="display: none;"></iframe>
    </body>
    <script>
$("#frame").attr("src", "路径?time=" + new Date().getTime()).load(function(){
    // 获取iframe标签的值并进行获取,显示到页面
    $("#show").append("[data: " + $($("#frame").get(0).contentDocument).find("body").text()

+ " ]");
});
    </script>

方法五:
    HTML5中websocket可以进行跨域的访问;
  创建一个websocket对象:

    var ws = new WebSocket(url);

  主要处理的事件类型有(onopen,onclose,onmessage,onerror);

    例如:

    ws.onopen = function(){

      console.log("open");

      // 向后台发送数据

      ws.send("open");

    }

    后台可以是java,php,nodejs等,对数据处理用时间onmessage事件对返回的值进行前端处理。

    ws.onmessage = function(eve){

      console.log(eve.data);

    }

  

时间: 2024-10-29 22:04:07

js实现跨域的方法的相关文章

JS访问或设置cookie的方法+跨域调用方法

无意中从163网站获取的JS访问或设置cookie的方法,Log到日志上以防遗忘 //COOKIE功能检查function fCheckCookie(){    if(!navigator.cookieEnabled){        alert("您好,您的浏览器设置禁止使用cookie\n请设置您的浏览器,启用cookie功能,再重新登录.");    }} //获取Cookiefunction fGetCookie(sName){   var sSearch = sName +

跨域通信方法总结

本文总结了5种较常见的跨域通信方法,如下: 1)jsonp 2)CORS(Cross OriginResource Sharing,跨源资源共享) 3)主域相同可以设置document.domain 4)利用window.name实现跨域 5)利用window.name实现跨域 jsonp 讲解jsonp之前先看一个例子:假设域A.com上有一个页面a.html,代码如下: var dosomething= function(data){ alert('我是A.com域上的页面,可以被跨域的re

js调用跨域

web aapi 初体验 解决js调用跨域问题 跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user     http:IP:8002/api/user 不同IP不同端口: http://172.28.20.100:8001/api/user    http://172.128.20.100:8002/api/user 基本介绍 web api出现的时间也不短了,一直没机会运用,很多公司还是用的wcf 和webservice.目前常用的web api场景是一个接口多

js&amp;jquery跨域详解jsonp,jquery并发大量请求丢失回调bug

URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.js http://www.a.com/b.js 同一域名,不同端口 不允许 http://www.a.com/a.js https://www.a.com/b.js 同一域名,不

跨域解决方法

跨域解决方法: 1.利用后端 ①设置头信息 ②后端代理 2.flash代理 3.jsonp 在js中找到一个代理 ①能够访问网络资源,并且不会有跨域问题 ②获取到资源数据可以给js使用 var oScript = document.createElement('script'); oScript.src = 'data.php'; document.body.appendChild(oScript); IE解决$.ajax() 跨域 $.support.cors = true;

html5的postmessage实现js前端跨域访问及调用解决方案

关于跨域访问,使用JSONP的方法,我前面已经demo过了,具体见http://supercharles888.blog.51cto.com/609344/856886,HTML5提供了一个非常强大的API,叫postMessage,它其实就是以前iframe的进化版本,使用起来极其方便,这里举个实验例子: 我们依旧按照与上文相同的设定,假定我们有2个Domain Domain1: http://localhost:8080  它上面有个应用叫HTMLDomain1,并且有个页面叫sender.

AJAX四种跨域处理方法

同源策略 同源策略 同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制.具体定义是:一段脚本向后台请求数据,只能读取属于同一协议名.同一主机名.同一端口号下的数据.因此,请求不同协议名.不同主机名.不同端口号下的文件,违背同源策略,无法请求成果,需要进行跨域处理.同源策略限制的具体行为:(1)Cookie.LocalStorage.IndexDB无法读取:(2)DOM无法获得:(3)AJAX请求不能发送. 什么是跨域? 两个页面之

解决跨域的方法

前端解决跨域的方法都是基于<script>标签可以跨域请求 平时的ajax请求所经历的过程 const xhr = new XMLHttpRequest() xhr.onreadystatechange = function () { switch (xhr.readyState) { case 0: // UNSENT (未打开) debugger break case 1: // OPENED (未发送) debugger break case 2: // HEADERS_RECEIVED

将微博或者qq空间的说说同步至博客园 wcf+js(ajax)跨域请求(1)

前天刚写了篇文章使用Bootstrap为你的博客园自定义轮播图片(今天将图片加载的顺序调整了下,不在访问的时候直接加载,而是页面加载最后在脚本里面动态添加dom元素),虽说技术含量不怎么高,但是大家还算感兴趣.其实对博主来说最关键是博客的积分在涨.所以趁热打铁,再来一篇使用wcf+js ajax跨域请求数据同步空间说说的帖子. 因为是请求qq说说的数据,所以要登陆我的qq,这个很麻烦,总不能让每个访客都登陆的qq,然后把数据取出来吧,而且qq也没有相关的接口提供,登陆的时候还要处理验证码.所以这