原生js的ajax和解決跨域的jsonp(實(shí)例講解)
最近慢慢感覺,學(xué)再多框架,庫(kù),都不如老老實(shí)實(shí)先把基礎(chǔ)弄扎實(shí)了。
不說廢話,先上一個(gè)用ajax請(qǐng)求下本地的一個(gè).txt文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> window.onload =function(){ var oBtn = document.getElementById('btn'); oBtn.onclick = function(){ //創(chuàng)建XHR對(duì)象 var xhr = new XMLHttpRequest(); //請(qǐng)求的方式,地址,是否異步 xhr.open('get','test.txt',true); //請(qǐng)求的確定操作,初始化,相當(dāng)于搜索時(shí),敲擊的回車 xhr.send(null); //請(qǐng)求的readyState每變化一次就執(zhí)行一次onreadystatechange函數(shù) //其中readyState表示的是:請(qǐng)求/響應(yīng)過程的當(dāng)前活動(dòng)階段 //readyState有如下取值 /* * 0:未初始化,尚未調(diào)用send()方法 * 1: 啟動(dòng) * 2:發(fā)送 * 3:接收 * 4:完成 */ xhr.onreadystatechange =function(){ if(xhr.readyState ==4){ alert(xhr.responseText); } } }; }; </script> </head> <body> <input type="button" id="btn" value="show"> </body> </html>
執(zhí)行效果如下,點(diǎn)擊show就會(huì)通過ajax請(qǐng)求本地的.txt文件。
代碼比較簡(jiǎn)單,加上注釋,相信很容易就看得懂。
但是工作中我們經(jīng)常會(huì)請(qǐng)求其他域下的資源(因?yàn)橥床呗裕?,這個(gè)時(shí)候就遇到了跨域(協(xié)議,端口,域名任何一個(gè)不同就算是跨域)。
解決跨域的一種常用辦法就是jsonp,雖然他有局限性(只支持get請(qǐng)求),不過優(yōu)點(diǎn)是兼容老式瀏覽器(不過現(xiàn)在好像很少有人在意老式瀏覽器了)。
jsonp的基本原理:就是通過動(dòng)態(tài)創(chuàng)建script標(biāo)簽,script標(biāo)簽的src是沒有跨域限制的。
接下來上一個(gè)類似百度搜索下拉的頁(yè)面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } input{ width:300px; height:30px; border:1px solid lightgray; margin-top: 150px; margin-left: 200px; padding-left: 5px; } ul{ width:307px; list-style: none; margin-left: 200px; display: none; } li{ height:30px; border: 1px solid lightgray; line-height: 30px; padding-left: 5px; } </style> <script> function callbackD(response){ var oUl = document.getElementById('ulList'); var html=''; if(response.s.length !=0){ oUl.style.display='block'; for(var i = 0;i<response.s.length;i++){ html+='<li>'+response.s[i]+'</li>' } } oUl.innerHTML = html; } </script> <script> window.onload = function(){ //獲取dom元素 var oData = document.getElementById('inputSearch'); var oUl = document.getElementById('ulList'); //鍵盤按下后抬起觸發(fā)事件(onkeyup) oData.onkeyup = function(){ if(oData.value != ''){ //創(chuàng)建標(biāo)簽(createElement) var script = document.createElement("script"); //添加地址 script.src='http://unionsug.baidu.com/su?wd='+this.value+'&p=3&cb=callbackD'; //添加給body的(成為body包涵的孩子) document.body.appendChild(script); }else{ oUl.style.display='none'; } } }; </script> </head> <body> <input type="text" id="inputSearch"> <ul id="ulList"> <li>123</li> </ul> </body> </html>
執(zhí)行效果如下:
代碼也相對(duì)比較簡(jiǎn)單,加上代碼的注釋,一定很容易看懂,這就是解決跨域的一種常用辦法,其他有反向代理,CORS啊等等,等我學(xué)好再整理出來。
以上這篇原生js的ajax和解決跨域的jsonp(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
跟我學(xué)習(xí)javascript的undefined與null
跟我學(xué)習(xí)javascript的undefined與null,從定義上理解null和undefined,告訴大家提高undefined性能的方法,感興趣的小伙伴們可以參考一下2015-11-11element-ui 圖片壓縮上傳功能實(shí)現(xiàn)
這篇文章主要介紹了element-ui 圖片壓縮上傳功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10JavaScript常用基礎(chǔ)知識(shí)強(qiáng)化學(xué)習(xí)
這篇文章主要介紹了JavaScript常用基礎(chǔ)知識(shí)強(qiáng)化學(xué)習(xí),需要的朋友可以參考下2015-12-12三步實(shí)現(xiàn)ionic3點(diǎn)擊退出app程序
這篇文章主要為大家詳細(xì)介紹了三步實(shí)現(xiàn)ionic3點(diǎn)擊退出app程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09