mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

当前位置: mg4377娱乐娱城官网 > www.mg4377.com > 正文

www.mg4377.com:ajax的跨域请求,ajax完毕跨域请求

时间:2019-06-04 19:57来源:www.mg4377.com
一、原生JS实现ajax 一、原生JS实现ajax ajax的跨域请求,ajax跨域请求 因为昨天直接用的mvc,所以就以mvc来讲说ajax跨域提交。 首先步得到XMLHttpRequest对象 第壹步获得XMLHttpRequest对象 同源战

一、原生JS实现ajax

一、原生JS实现ajax

ajax的跨域请求,ajax跨域请求

因为昨天直接用的mvc,所以就以mvc来讲说ajax跨域提交。

首先步得到XMLHttpRequest对象

第壹步获得XMLHttpRequest对象

同源战略

www.mg4377.com:ajax的跨域请求,ajax完毕跨域请求。同源战术(萨姆e origin policy)是壹种约定,它是浏览器最基本也最基本的安全成效,借使相当不足了同源计谋,则浏览器的健康职能恐怕都会受到震慑。能够说Web是构建在同源计谋基础之上的,浏览器只是本着同源攻略的1种完毕。

同源攻略,它是由Netscape提出的三个名牌的安全计谋。现在颇具扶助JavaScript 的浏览器都会采取那些攻略。所谓同源是指,域名,协议,端口一样。当三个浏览器的七个tab页中分别展开来 百度和谷歌的页面当浏览器的百度tab页推行多少个剧本的时候会检查这一个脚本是属于哪个页面包车型客车,即检查是还是不是同源,唯有和百度同源的剧本才会被实行。假诺非同源,那么在呼吁数据时,浏览器会在调节嘉义报一个可怜,提示拒绝访问。

 

第三步:设置意况监听函数

其次步:设置景况监听函数

Jsonp

jsonp是json用来跨域的一个事物。原理是通过script标签的跨域本性来绕过同源战术。

想想:那算怎么回事?

1 <script src="http://code.jquery.com/jquery-latest.js"></script>

 借助script标签,实现跨域请求,示例:

# =============================http://127.0.0.1:8001/index


<button>ajax</button>
{% csrf_token %}

<script>
    function func(name){
        alert(name)
    }
</script>

<script src="http://127.0.0.1:7766/SendAjax/"></script>


# =============================http://127.0.0.1:8002/
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt


def SendAjax(request):

    import json

    print("        ")
    # dic={"k1":"v1"}
    return HttpResponse("func('www')")  # return HttpResponse("func('%s')"%json.dumps(dic))

那实际正是JSONP的简易实现情势,可能说是JSONP的原型:成立一个回调函数,然后在长距离服务上调用那么些函数并且将JSON 数据情势作为参数传递,落成回调。

将JSON数据填充进回调函数,那正是JSONP的JSON Padding的意思。

      一般景色下,大家期待以此script标签能够动态的调用,而不是像上面因为固定在html里面所以没等页面展现就施行了,很不灵敏。大家能够通过javascript动态的创立script标签,那样我们就足以灵活调用远程服务了。

<button onclick="f()">sendAjax</button>

<script>
    function addScriptTag(src){
         var script = document.createElement('script');
         script.setAttribute("type","text/javascript");
         script.src = src;
         document.body.appendChild(script);
         document.body.removeChild(script);
    }


    function func(name){
        alert("hello" name)
    }

    function f(){
         addScriptTag("http://127.0.0.1:7766/SendAjax/")
    }
</script>

为了更灵活,以往将你自个儿在客户端定义的回调函数的函数名传送给服务端,服务端则会重返以你定义的回调函数名的秘诀,将赢得的json数据传入这几个办法成功回调:

将8001的f()改写为:

1 2 3 function f(){          addScriptTag("http://127.0.0.1:7766/SendAjax/?callbacks=func")     }

8002的views改为:

1 2 3 4 5 6 7 8 9 10 def SendAjax(request):       import json       dic={"k1":"v1"}       print("callbacks:",request.GET.get("callbacks"))     callbacks=request.GET.get("callbacks")       return HttpResponse("%s('%s')"%(callbacks,json.dumps(dic)))

率先说说跨域,轻便说便是例外域名访问,举个例子在aaa.com访问bbb.com。

其三步:open三个三番陆回,true是异步请求

其三步:open叁个连连,true是异步请求

jQuery对JSONP的实现

 

第6部:send1个伸手,能够发送1个指标和字符串,没有需求传递数据发送null

第六部:send2个请求,能够发送三个目的和字符串,不需求传递数据发送null

getJSON

jQuery框架也当然援助JSONP,可以选取$.getJSON(url,[data],[callback])方法

8001的html改为:

<button onclick="f()">sendAjax</button>

<script>

    function f(){
          $.getJSON("http://127.0.0.1:7766/SendAjax/?callbacks=?",function(arg){
            alert("hello" arg)
        });
    }

</script>

8002的views不改动。

结果是均等的,要留心的是在url的末尾总得增添一个callback参数,那样getJSON方法才会明白是用JSONP情势去拜访服务,callback后边的非常问号是里面自动生成的3个回调函数名。

      其它,若是说大家想钦点自身的回调函数名,大概说服务上规定了一向回调函数名该如何做吧?大家得以行使$.ajax方法来落到实处

就拿招聘网址以来,分为两种用户,求职者和商家,求职者端是招聘官方网址,那是2个网址;集团所登陆的是招聘管理种类,那也是1个网址。

第5步:在监听函数中,判别readyState=四&&status=200意味着请求成功

第四步:在监听函数中,剖断readyState=四&&status=200代表请求成功

 $.ajax

8001的html改为:

<script>

    function f(){
          $.ajax({
                url:"http://127.0.0.1:7766/SendAjax/",
                dataType:"jsonp",
                jsonp: 'callbacks',
                jsonpCallback:"SayHi"
           });

       }

    function SayHi(arg){
                alert(arg);
            }

</script>

8002的views不改动。

本来,最简便易行的样式照旧经过回调函数来处理:

<script>

    function f(){

            $.ajax({
               url:"http://127.0.0.1:7766/SendAjax/",
               dataType:"jsonp",            //必须有,告诉server,这次访问要的是一个jsonp的结果。
               jsonp: 'callbacks',          //jQuery帮助随机生成的:callbacks="wner"
               success:function(data){
                   alert("hi " data)
              }
         });

       }

</script>

  jsonp: 'callbacks'就是概念2个存放回调函数的键,jsonpCallback是前者定义好的回调函数方法名'SayHi',server端接受callback键对应值后就足以在里头填充数据打包重临了; 

jsonpCallback参数能够不定义,jquery会自动定义2个随机名发过去,那前端就得用回调函数来管理相应数据了。利用jQuery能够很便宜的完毕JSONP来拓展跨域访问。  

注意 JSONP一定是GET请求

 

第伍步:使用responseText、responseXML接受响应数据,并应用原生JS操作DOM进行体现

第4步:使用responseText、responseXML接受响应数据,并运用原生JS操作DOM举办展示

Jsonp

jsonp是json用来跨域的3个事物。原理是通过script标签的跨域特性来绕过同源战术。

沉凝:那算怎么回事?

1 <script src="http://code.jquery.com/jquery-latest.js"></script>

 借助script标签,落成跨域请求,示例:

# =============================http://127.0.0.1:8001/index


<button>ajax</button>
{% csrf_token %}

<script>
    function func(name){
        alert(name)
    }
</script>

<script src="http://127.0.0.1:7766/SendAjax/"></script>


# =============================http://127.0.0.1:8002/
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt


def SendAjax(request):

    import json

    print("        ")
    # dic={"k1":"v1"}
    return HttpResponse("func('yuan')")  # return HttpResponse("func('%s')"%json.dumps(dic))

那实际便是JSONP的粗略达成形式,只怕说是JSONP的原型:成立3个回调函数,然后在长途服务上调用那个函数并且将JSON 数据情势作为参数传递,达成回调。

将JSON数据填充进回调函数,这正是JSONP的JSON Padding的含义。

      一般意况下,大家盼望以此script标签能够动态的调用,而不是像上边因为固定在html里面所以没等页面展现就施行了,很不活络。大家能够通过javascript动态的开创script标签,那样我们就足以灵活调用远程服务了。

<button onclick="f()">sendAjax</button>

<script>
    function addScriptTag(src){
         var script = document.createElement('script');
         script.setAttribute("type","text/javascript");
         script.src = src;
         document.body.appendChild(script);
         document.body.removeChild(script);
    }


    function func(name){
        alert("hello" name)
    }

    function f(){
         addScriptTag("http://127.0.0.1:7766/SendAjax/")
    }
</script>

为了越来越灵活,今后将你自个儿在客户端定义的回调函数的函数名传送给服务端,服务端则会再次回到以你定义的回调函数名的措施,将获得的json数据传入那么些办法成功回调:

将8001的f()改写为:

1 2 3 function f(){          addScriptTag("http://127.0.0.1:7766/SendAjax/?callbacks=func")     }

8002的views改为:

1 2 3 4 5 6 7 8 9 10 def SendAjax(request):       import json       dic={"k1":"v1"}       print("callbacks:",request.GET.get("callbacks"))     callbacks=request.GET.get("callbacks")       return HttpResponse("%s('%s')"%(callbacks,json.dumps(dic)))

同源攻略同源战术(Same origin policy)是1种约定,它是浏览器最中央也最大旨的平安效能,借使缺点和失误了同源策...

但貌似公司都是从官方网址选用商家报到后再进来招聘系统的(究竟那是官方网址嘛),熟谙之后就能够直接从招聘系统登六进入。那么在官方网站登6然后进入招聘系统实际那个进度就用到了跨域。

var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
 console.log(ajax.readyState);
 console.log(ajax.status);
 if(ajax.readyState==4 && ajax.status==200){
  console.log(ajax.responseText);
  console.log(ajax.responseXML);//返回不是XML,显示null
  console.log(JSON.parse(ajax.responseText));
  console.log(eval("(" ajax.responseText ")"));
  }
}
ajax.open("GET","h51701.json",true);
ajax.send(null);
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
    console.log(ajax.readyState);
    console.log(ajax.status);
    if(ajax.readyState==4 && ajax.status==200){
        console.log(ajax.responseText);
        console.log(ajax.responseXML);//返回不是XML,显示null
        console.log(JSON.parse(ajax.responseText));
        console.log(eval("(" ajax.responseText ")"));
        }
}
ajax.open("GET","h51701.json",true);
ajax.send(null);

 

贰、ajax的跨域请求

2、ajax的跨域请求

选聘系统项目标Controllers里写了登入的Action,今年就绝不再到官方网址的Controllers中写一个Action,而是进行跨域请求。

编辑:www.mg4377.com 本文来源:www.mg4377.com:ajax的跨域请求,ajax完毕跨域请求

关键词: ajax JS 跨域请求 .net