您好,登錄后才能下訂單哦!
最近慢慢感覺,學再多框架,庫,都不如老老實實先把基礎弄扎實了。
不說廢話,先上一個用ajax請求下本地的一個.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(){ //創建XHR對象 var xhr = new XMLHttpRequest(); //請求的方式,地址,是否異步 xhr.open('get','test.txt',true); //請求的確定操作,初始化,相當于搜索時,敲擊的回車 xhr.send(null); //請求的readyState每變化一次就執行一次onreadystatechange函數 //其中readyState表示的是:請求/響應過程的當前活動階段 //readyState有如下取值 /* * 0:未初始化,尚未調用send()方法 * 1: 啟動 * 2:發送 * 3:接收 * 4:完成 */ xhr.onreadystatechange =function(){ if(xhr.readyState ==4){ alert(xhr.responseText); } } }; }; </script> </head> <body> <input type="button" id="btn" value="show"> </body> </html>
執行效果如下,點擊show就會通過ajax請求本地的.txt文件。
代碼比較簡單,加上注釋,相信很容易就看得懂。
但是工作中我們經常會請求其他域下的資源(因為同源策略),這個時候就遇到了跨域(協議,端口,域名任何一個不同就算是跨域)。
解決跨域的一種常用辦法就是jsonp,雖然他有局限性(只支持get請求),不過優點是兼容老式瀏覽器(不過現在好像很少有人在意老式瀏覽器了)。
jsonp的基本原理:就是通過動態創建script標簽,script標簽的src是沒有跨域限制的。
接下來上一個類似百度搜索下拉的頁面
<!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'); //鍵盤按下后抬起觸發事件(onkeyup) oData.onkeyup = function(){ if(oData.value != ''){ //創建標簽(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>
執行效果如下:
代碼也相對比較簡單,加上代碼的注釋,一定很容易看懂,這就是解決跨域的一種常用辦法,其他有反向代理,CORS啊等等,等我學好再整理出來。
以上這篇原生js的ajax和解決跨域的jsonp(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。