黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

Ajax基礎(chǔ)使用詳解
目錄
app.post('/postcors',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置所有協(xié)議、域名、端口、允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 指定端口允許跨域
    response.setheader('access-control-allow-origin','http://127.0.0.1:8082');
    // 響應(yīng)頭,允許所有的響應(yīng)頭類型
    response.setheader('access-control-allow-headers','*');
    // 設(shè)置響應(yīng)體
    const data = { 
        name:'cors json',
        type:'post json type'
    }
    response.send(json.stringify(data));
});

ajax基礎(chǔ)

1.1ajax簡(jiǎn)介

ajax全稱是asynchronous javascript and xml,就是異步的js和xml

通過(guò)ajax可以在瀏覽器中向服務(wù)器發(fā)送異步請(qǐng)求,最大的優(yōu)勢(shì)是:無(wú)刷新獲取數(shù)據(jù)。

ajax不是新的編程語(yǔ)言,而是一種將現(xiàn)有的標(biāo)準(zhǔn)組合在一起使用的新方式。

1.2xml簡(jiǎn)介

xml 可擴(kuò)展標(biāo)記語(yǔ)言

xml 被設(shè)計(jì)用來(lái)傳輸和保存數(shù)據(jù)

xml和html類似,,不同的是html中都是預(yù)定義標(biāo)簽;而xml中沒(méi)有預(yù)定義標(biāo)簽,全都是自定義標(biāo)簽,用來(lái)保存一些數(shù)據(jù)

最開(kāi)始ajax在進(jìn)行數(shù)據(jù)交換的時(shí)候,使用的格式就是xml,服務(wù)器端給瀏覽器返回結(jié)果時(shí)就是返回xml格式的字符串,前端的js在接收到結(jié)果之后對(duì)xml格式的字符串進(jìn)行解析,把數(shù)據(jù)提取出來(lái)。

但是現(xiàn)在使用ajax時(shí)候就不再使用xml了,而是換成了json格式,json相對(duì)于xml更加簡(jiǎn)潔,在數(shù)據(jù)轉(zhuǎn)換方面也相對(duì)容易、更靈活。

<student>
    <name>名字</name>
    <age>年齡</age>
    <gender></gender>
</student>

1.3ajax的特點(diǎn)

1.3.1ajax的優(yōu)點(diǎn)

可以無(wú)需刷新頁(yè)面與服務(wù)器進(jìn)行通信允許你根據(jù)用戶事件來(lái)更新部分頁(yè)面內(nèi)容

1.3.2ajax的缺點(diǎn)

沒(méi)有瀏覽歷史,不能回退存在跨域問(wèn)題(同源)seo(搜索引擎優(yōu)化)不友好,網(wǎng)頁(yè)爬蟲(chóng)爬不到,源代碼(響應(yīng)體)第一次請(qǐng)求時(shí)沒(méi)有要請(qǐng)求內(nèi)容的信息,他是通過(guò)ajax向服務(wù)端發(fā)請(qǐng)求,服務(wù)端返回結(jié)果,然后js動(dòng)態(tài)創(chuàng)建到頁(yè)面中的,爬蟲(chóng)爬不到數(shù)據(jù)。ie緩存問(wèn)題:ie瀏覽器會(huì)對(duì)ajax請(qǐng)求結(jié)果進(jìn)行緩存,把結(jié)果緩存起來(lái);當(dāng)下一次再去請(qǐng)求數(shù)據(jù)時(shí)候,會(huì)到緩存里找,而不是服務(wù)器返回的最新的請(qǐng)求結(jié)果,這樣的話可能會(huì)影響結(jié)果,解決的辦法是在url?后面加一個(gè)時(shí)間戳,讓瀏覽器知道這是兩次不同的請(qǐng)求。

1.4http協(xié)議

hypertext transport protocol 超文本傳輸協(xié)議,協(xié)議詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)服務(wù)器之間互相通信的規(guī)則。

協(xié)議就是一種約定、規(guī)則。主要約定了請(qǐng)求報(bào)文、響應(yīng)報(bào)文這兩塊的內(nèi)容。

請(qǐng)求報(bào)文

格式:

一個(gè)完整的http請(qǐng)求報(bào)文
請(qǐng)求行:{
	請(qǐng)求類型get/post   url路徑  http協(xié)議版本1.0 / 1.1 / 2.0
}
請(qǐng)求頭:{
	host: baidu.com
	ciikie: name=baidu
	content-type: application/x-www-from-urlencoded    //告知服務(wù)器我的請(qǐng)求體是什么類型的
	user-agent: chrome 83        
}
空行:{}
請(qǐng)求體:{//如果是get請(qǐng)求,請(qǐng)求體是空的;如果是post請(qǐng)求,請(qǐng)求體可以不為空
	username=admin&password=admin
}
一個(gè)完整的http響應(yīng)報(bào)文
行:http/1.1  200  ok  (協(xié)議版本 響應(yīng)狀態(tài)碼  響應(yīng)狀態(tài)字符串)
頭: content-type:text/html;charset=utf-8	//類型   就是對(duì)響應(yīng)體內(nèi) 容進(jìn)行一些相關(guān)的描述
    content-length:2048					 //長(zhǎng)度
    content-encoding:gzip				 //壓縮方式
空行:必須要有
體:	<html>
		<body>
			<h1> html響應(yīng)的內(nèi)容是放在了響應(yīng)的報(bào)文當(dāng)中,瀏覽器在接到結(jié)果之后會(huì)把響應(yīng)體結(jié)果提取出來(lái),對(duì)內(nèi)容進(jìn)行解析,在頁(yè)面渲染并顯示
			</h1>
		</body>
	 </html>

參數(shù):

1.4.1 express

// 1. 引入express
const express = require('express');
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則 request是對(duì)請(qǐng)求報(bào)文的封裝  response是對(duì)響應(yīng)報(bào)文的封裝
app.get('/server',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 設(shè)置響應(yīng)體
    response.send('hello 原生ajax!');
});
// 4. 監(jiān)聽(tīng)端口啟動(dòng)服務(wù)
app.listen(8082,()=>{
    console.log("服務(wù)已經(jīng)啟動(dòng)8082端口監(jiān)聽(tīng)中......");
})

1.5ajax的應(yīng)用

1.5.1原生ajax get請(qǐng)求

只需要四步:

  • 創(chuàng)建xmlhttprequest對(duì)象 const xhr = new xmlhttprequest();
  • 設(shè)置請(qǐng)求的方法和url xhr.open('get','//127.0.0.1:8082/server');
  • 發(fā)送 xhr.send();
  • 處理服務(wù)端返回的結(jié)果 xhr.onreadystatechange = function(){}

當(dāng)xhr對(duì)象里的readystate屬性改變時(shí)處理。

readystate四個(gè)值的意義

  • 0 未初始化
  • 1 open方法已經(jīng)調(diào)用完畢
  • 2 send方法已經(jīng)調(diào)用完畢
  • 3 服務(wù)端返回了部分結(jié)果
  • 4 服務(wù)端返回了所有結(jié)果
 <button id="btn">點(diǎn)擊發(fā)送請(qǐng)求</button>
    <div id="result"></div>
    <script>
        const btn = document.getelementsbytagname("button")[0];
        const result=document.getelementbyid("result");
        btn.onclick=function(){
            // ajax的操作
            // 1. 創(chuàng)建對(duì)象,
            const xhr = new xmlhttprequest();
            // 2. 設(shè)置請(qǐng)求的方法和url
            xhr.open('get','http://127.0.0.1:8082/server');
            // 3. 發(fā)送
            xhr.send();
            // 4. 事件綁定,處理服務(wù)端返回的結(jié)果
            // on==when. readystate是xhr對(duì)象中的屬性,表示狀態(tài) .change 改變會(huì)改變四次
            // 0未初始化  1(open方法已經(jīng)調(diào)用完畢) 2(send方法已經(jīng)調(diào)用完畢) 3(服務(wù)端返回了部分結(jié)果) 4(服務(wù)端返回了所有結(jié)果)
            xhr.onreadystatechange = function(){
                // 判斷服務(wù)端是否返回了所有結(jié)果
                if(xhr.readystate === 4){
                    //判斷響應(yīng)狀態(tài)碼
                    if(xhr.status >= 200 && xhr.status < 300){
                        // 處理結(jié)果 行 頭 空行 體
                        // 1.響應(yīng)行
                        console.log(xhr.status);//狀態(tài)碼
                        console.log(xhr.statustext);//狀態(tài)字符串
                        console.log(xhr.getallresponseheaders.tostring());//所有響應(yīng)頭
                        console.log(xhr.response);//響應(yīng)體
                        result.innerhtml = xhr.response;
                    }else{
                    }
                }
            }
        }
    </script>

設(shè)置參數(shù)

可以在url后面直接加上?參數(shù)名:值&參數(shù)名:值…

xhr.open('get','//127.0.0.1:8082/server?name=admin&password=admin');

post請(qǐng)求

<script>
        const result = document.getelementbyid("result"); result.addeventlistener("mouseover",function(){
            // 1. 創(chuàng)建對(duì)象
            const xhr = new xmlhttprequest();
            // 2.初始化,設(shè)置請(qǐng)求類型 與 方法 xhr.open('post','http://127.0.0.1:8082/server');
            // 3. 發(fā)送請(qǐng)求
            xhr.send();
            // 4.事件處理
            xhr.onreadystatechange=function(){
                if(xhr.readystate === 4){
                    if(xhr.status >=200 && xhr.status<300){
                        result.innerhtml=xhr.response;
                        // console.log(xhr.getallresponseheaders());
                    }
                }
            }
        });
    </script>
報(bào)錯(cuò)信息
access to xmlhttprequest at 'http://127.0.0.1:8082/server' from origin 'null' has been blocked by cors policy: no 'access-control-allow-origin' header is present on the requested resource.
已攔截跨源請(qǐng)求:同源策略禁止讀取位于 http://127.0.0.1:8082/server 的遠(yuǎn)程資源。(原因:cors 頭缺少 'access-control-allow-origin')。狀態(tài)碼:404。
因?yàn)榉?wù)端沒(méi)有一個(gè)與之匹配的路由規(guī)則,而且沒(méi)有設(shè)置響應(yīng)頭

參數(shù)設(shè)置

// 在send方法里可以設(shè)置參數(shù),可以設(shè)置任意類型,任意格式的數(shù)據(jù)
xhr.send('a=100&b=200&c=300');

1.6設(shè)置請(qǐng)求頭信息

            // 設(shè)置請(qǐng)求頭信息 一般設(shè)置一些預(yù)定義的請(qǐng)求頭
            // content-type 用來(lái)設(shè)置請(qǐng)求體的內(nèi)容類型
            // application/x-www-form-urlencoded 設(shè)置參數(shù)查詢字符串的類型
            // 請(qǐng)求頭信息也可以自定義,但是瀏覽器會(huì)有安全機(jī)制,
            xhr.setrequestheader('content-type','application/x-www-form-urlencoded');
            // 設(shè)置請(qǐng)求頭的信息是因?yàn)?要把身份校驗(yàn)的信息放在頭信息里面,把他傳遞給服務(wù)器,由服務(wù)器對(duì)參數(shù)做提取,對(duì)用戶的身份進(jìn)行校驗(yàn)
            xhr.setrequestheader('name','yxj');

后端操作

// all表示可以接受所有類型的請(qǐng)求
app.all('/server',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 響應(yīng)頭,允許所有的響應(yīng)頭類型
    response.setheader('access-control-allow-headers','*')
    // 設(shè)置響應(yīng)體
    response.send('hello 原生ajax post!');
});

2.1服務(wù)端響應(yīng)json數(shù)據(jù)

nodemon工具可以實(shí)時(shí)重啟服務(wù)器

    <script>
        const result = document.getelementbyid("result");
        // 綁定鍵盤(pán)按下事件
        window.onkeydown=function(){
            // 1. 獲取xhr對(duì)象
            const xhr = new xmlhttprequest();
            // 設(shè)置響應(yīng)體數(shù)據(jù)類型
            xhr.responsetype = 'json';
            // 2.初始化
            xhr.open('get','http://127.0.0.1:8082/json-server');
            // 3.發(fā)送
            xhr.send();
            // 4. 處理數(shù)據(jù)
            xhr.onreadystatechange=function(){
                if(xhr.readystate === 4){
                    if(xhr.status >=200 && xhr.status <300 ){
                        // 手動(dòng)將數(shù)據(jù)轉(zhuǎn)換
                        // let data = json.parse(xhr.response);
                        // result.innerhtml= data.name;
                        // console.log(data);
                        // 自動(dòng)轉(zhuǎn)換
                        console.log(xhr.response);
                        result.innerhtml= xhr.response.name;
                    }
                }
            }
        }
    </script>

后臺(tái)

app.all('/json-server',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 響應(yīng)頭,允許所有的響應(yīng)頭類型
    response.setheader('access-control-allow-headers','*')
    // 設(shè)置一個(gè)響應(yīng)數(shù)據(jù)
    const data={
        name:"winter",
        age:18,
        sex:"man"
    }
    // 設(shè)置響應(yīng)體,send方法里只能接收字符串和buffer 類型
    //所以要對(duì)對(duì)象進(jìn)行一個(gè)轉(zhuǎn)換
    let str = json.stringify(data);
    response.send(str);
});

2.2解決ie緩存問(wèn)題

xhr.open('get','http://127.0.0.1:8082/json-server?t='+date.now());
//加一個(gè)時(shí)間戳,讓瀏覽器知道這是兩次不同的請(qǐng)求。

2.3超時(shí)與網(wǎng)絡(luò)錯(cuò)誤的處理

            //超時(shí)設(shè)置 請(qǐng)求超過(guò)2s則取消請(qǐng)求
            xhr.timeout = 2000;
            // 超時(shí)回調(diào)  實(shí)際中應(yīng)該采取更加友好的方式
            xhr.ontimeout = function(){
                alert("網(wǎng)絡(luò)請(qǐng)求超時(shí)!");
            }
            // 網(wǎng)絡(luò)異常回調(diào)
            xhr.onerror = function(){
                alert("網(wǎng)絡(luò)異常!");
            } xhr.open('get','http://127.0.0.1:8082/out?'+date.now());
            xhr.send();

2.4取消ajax請(qǐng)求

const xhr = new xmlhttprequest();
xhr.abort();

2.5ajax重復(fù)發(fā)送請(qǐng)求情況

如果客戶端一直向服務(wù)器發(fā)送相同的請(qǐng)求,服務(wù)器的壓力就會(huì)很大,會(huì)接收到很多的相同請(qǐng)求。

解決辦法:

在向服務(wù)器發(fā)送請(qǐng)求之前先判斷之前有沒(méi)有發(fā)起過(guò)相同的請(qǐng)求,如果有就將之前的請(qǐng)求取消掉,重新發(fā)起請(qǐng)求。這樣一來(lái)我們向服務(wù)器發(fā)起的請(qǐng)求始終只有一個(gè),服務(wù)器壓力就會(huì)小一些

<script>
        const btn = document.getelementsbytagname("button")[0];
        const result=document.getelementbyid("result");
        let xhr = null;
        //標(biāo)識(shí)變量
        let issending = false; //是否正在發(fā)送ajax請(qǐng)求
        btn.onclick=function(){
            // 判斷標(biāo)識(shí)變量
            if(issending) xhr.abort();//如果正在發(fā)送,則取消該請(qǐng)求,創(chuàng)建一個(gè)新的請(qǐng)求
            xhr = new xmlhttprequest();
            // 修改 標(biāo)識(shí)變量的值
            issending = true;
            xhr.open('get','http://127.0.0.1:8082/out?'+date.now());
            xhr.send();
            xhr.onreadystatechange = function(){
                if(xhr.readystate === 4){
                    //修改標(biāo)識(shí)變量
                    issending = false;
                    if(xhr.status >= 200 && xhr.status < 300){
                        result.innerhtml = xhr.response;
                        console.log(xhr.response);
                    }else{
                    }
                }
            }
        }
    </script>

3.1jquery發(fā)送ajax請(qǐng)求

<script>
        $('button').eq(0).click(function(){
    //$.get/post方法接收的是參數(shù)
            // 參數(shù)1:url  參數(shù)2:要發(fā)送的對(duì)象{}  參數(shù)三:回調(diào)函數(shù)(響應(yīng)體)操作服務(wù)器端返回的數(shù)據(jù) 參數(shù)4:設(shè)置響應(yīng)體類型
            $.get('http://127.0.0.1:8082/getjquery',{a:100,b:200},function(data){
                console.log(data);//對(duì)象
            },'json')
        });
        $('button').eq(1).click(function(){
            $.post('http://127.0.0.1:8082/postjquery',{a:300,b:400},function(data){
                console.log(data);//沒(méi)+json會(huì)返回字符串
            })
        });
        $('button').eq(2).click(function(){
            //$.ajax方法接接收的是一個(gè)對(duì)象,對(duì)象里有響應(yīng)的屬性,通過(guò)屬性設(shè)置參數(shù)
            $.ajax({
                // url:
                url:'http://127.0.0.1:8082/alljquery',
                // 參數(shù),post請(qǐng)求才能設(shè)置請(qǐng)求體
                data:{a:100,b:200},
                // 類型
                type:'post',
                // 響應(yīng)體結(jié)果
                datatype:'json',
                // 成功的回調(diào)
                success:function(data){
                    console.log(data);
                },
                // 超時(shí)時(shí)間
                timeout:8000,
                // 失敗的回調(diào) 超時(shí)、網(wǎng)絡(luò)異常
                error:function(){
                    console.log("出錯(cuò)了");
                },
                // 頭信息設(shè)置
                headers:{
                    name:'headers',
                    msg:'hiashfi',
                }
            });
        });
    </script>
app.get('/getjquery',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 設(shè)置響應(yīng)體
    const data = {
        name:'jquery json',
        type:'get json type'
    }
    response.send(json.stringify(data));
});
// jquery post
app.post('/postjquery',(request,response)=>{
    // 設(shè)置響應(yīng)頭. 名字,* (設(shè)置允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 響應(yīng)頭,允許所有的響應(yīng)頭類型
    response.setheader('access-control-allow-headers','*');
    // 設(shè)置響應(yīng)體
    const data = {
        name:'jquery json',
        type:'post json type'
    }
    response.send(json.stringify(data));
});

4.1 axios

axios 是一個(gè)基于 promise 網(wǎng)絡(luò)請(qǐng)求庫(kù),作用于node.js 和瀏覽器中。 在服務(wù)端它使用原生 node.js http 模塊, 而在客戶端 (瀏覽端) 則使用 xmlhttprequests。

特性:

  • 從瀏覽器創(chuàng)建 xmlhttprequests
  • 從 node.js 創(chuàng)建 http請(qǐng)求
  • 支持 promise api
  • 攔截請(qǐng)求和響應(yīng)
  • 轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
  • 取消請(qǐng)求
  • 自動(dòng)轉(zhuǎn)換json數(shù)據(jù)
  • 客戶端支持防御xsrf

4.12發(fā)起一個(gè)get請(qǐng)求

// 向給定id的用戶發(fā)起請(qǐng)求
axios.get('/user?id=12345')
  .then(function (response) {
    // 處理成功情況
    console.log(response);
  })
  .catch(function (error) {
    // 處理錯(cuò)誤情況
    console.log(error);
  })
  .then(function () {
    // 總是會(huì)執(zhí)行
  });

4.13 發(fā)起一個(gè) post 請(qǐng)求

axios.post('/user', {
    firstname: 'fred',
    lastname: 'flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

發(fā)起多個(gè)并發(fā)請(qǐng)求:

function getuseraccount() {
  return axios.get('/user/12345');
}
function getuserpermissions() {
  return axios.get('/user/12345/permissions');
}
promise.all([getuseraccount(), getuserpermissions()])
  .then(function (results) {
    const acct = results[0];
    const perm = results[1];
  });

4.1.4 可以向 axios 傳遞相關(guān)配置來(lái)創(chuàng)建請(qǐng)求

// 發(fā)起一個(gè)post請(qǐng)求
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstname: 'fred',
    lastname: 'flintstone'
  }
});
// 在 node.js 用get請(qǐng)求獲取遠(yuǎn)程圖片
axios({
  method: 'get',
  url: 'http://bit.ly/2mtm3ny',
  responsetype: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createwritestream('ada_lovelace.jpg'))
  });

5.1使用fetch函數(shù)發(fā)送ajax請(qǐng)求

fetch函數(shù)屬于全局對(duì)象,可以直接調(diào)用,返回的結(jié)果是promise對(duì)象

btns[0].onclick = function(){
            // fetch(url,{})
            fetch('http://127.0.0.1:8082/allaxios',{
                // 請(qǐng)求方法
                method:'post',
                // 請(qǐng)求頭
                headers:{
                    name:'fetch'
                },
                // 請(qǐng)求體
                body:'username=admin,password=123456'
            }).then(response=>{
                // console.log(response);
                // return response.text();//轉(zhuǎn)成string
                return response.json();//轉(zhuǎn)成json
            }).then(response=>{
                console.log(response);
            })
        }

6.1同源策略

same-oringin policy最早由netscape公司提出,是瀏覽器的一種安全策略

**同源:**協(xié)議、域名、端口號(hào)必須完全相同。

  • 就是來(lái)自相同的一個(gè)服務(wù)

ajax是默認(rèn)遵循同源策略的。不滿足同源策略是無(wú)法直接發(fā)送ajax請(qǐng)求的。

例:

  • 當(dāng)前網(wǎng)頁(yè)http://a.com 8000端口
  • 目標(biāo)資源的協(xié)議也必須是http協(xié)議,a.com域名,8000端口

跨域原因:

  • 因?yàn)閱闻_(tái)服務(wù)器,能力受限
  • 加入更多的服務(wù)器提供更多的服務(wù)

6.2跨域的解決

6.2.1 jsonp

jsonp是什么?

  • jsonp(json with padding),是一個(gè)非官方的解決方案,純粹憑借程序員的聰明才智開(kāi)發(fā)出來(lái)的,只支持get請(qǐng)求。

jsonp怎么工作?

  • 在網(wǎng)頁(yè)有一些標(biāo)簽天生具有跨域能力,比如:img、link、iframe、script.
  • jsonp利用script標(biāo)簽的跨域能力來(lái)發(fā)送請(qǐng)求的。

jsonp的使用

  • 動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽
var script = document.createelement("script");
  • 設(shè)置script的src,設(shè)置回調(diào)函數(shù)
script.src = "http://localhost:3000/testajax?callback=abc";

7. cors

// 設(shè)置響應(yīng)頭. 名字,* (設(shè)置所有協(xié)議、域名、端口、允許跨域)
    response.setheader('access-control-allow-origin','*');
    // 指定端口允許跨域
    response.setheader('access-control-allow-origin','http://127.0.0.1:8082');
    // 響應(yīng)頭,允許所有的響應(yīng)頭類型
    response.setheader('access-control-allow-headers','*');
    // 允許所有請(qǐng)求類型(get、post、...)
    response.setheader('access-control-allow-method','*');

https://developer.mozilla.org/zh-cn/docs/web/http/cors

cors是什么?

cors (cross - origin - resource sharing), 跨域資源共享。

cors是官方的跨域解決方案,他的特點(diǎn)是愛(ài)不需要在客戶端做任何特殊的操作,完全在服務(wù)器中進(jìn)行處理,支持get和post請(qǐng)求。

跨域資源共享新增了一組http首部字段,允許服務(wù)器聲明哪些源站通過(guò)瀏覽器有權(quán)限訪問(wèn)哪些資源。

cors是怎么工作的?

cors通過(guò)設(shè)置一個(gè)響應(yīng)頭來(lái)告訴瀏覽器,該請(qǐng)求允許跨域,瀏覽器收到該響應(yīng)以后就會(huì)對(duì)響應(yīng)放行。

cors的使用

主要是服務(wù)器里的設(shè)置:

router.get(“/testajax”,function(req,res){

})

 btn.onclick = function(){
            // 創(chuàng)建對(duì)象
            var xhr = new xmlhttprequest();
            // 
            xhr.open('get','http://127.0.0.1:8082/getcors');
            // 
            xhr.send();
            xhr.onreadystatechange = function(){
                if(xhr.readystate === 4){
                    if(xhr.status >= 200 && xhr.status<300){
                        console.log(xhr.response);
                    }
                }
            }
        }

到此這篇關(guān)于ajax基礎(chǔ)使用詳解的文章就介紹到這了,更多相關(guān)ajax基礎(chǔ)內(nèi)容請(qǐng)搜索碩編程以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持碩編程!

相關(guān)文章