--- title: AJAX基礎概念 tags: AJAX --- AJAX === * 非同步的JS與XML技術 * AJAX為Asynchronous JavaScript and XML的簡寫 * 也有人叫AjAj 源於Asynchronous JavaScript and JSON * 是一種技術的建立 實作方式有很多種 優點 === * 不需要載入就可以回應行為 * 傳輸資料結構化 * 傳輸資料精簡 缺點 === * SEO挑戰變高 * 瀏覽器相容性問題無法改變 * 網路延遲會影響使用者體驗 應用面 === * 串API * 背景載入 * JQ的話會用JQ的 * 原生語法比較少使用 * 如果是框架的比較常用Fetch跟axios XMLHttpRequest語法順序 (原生) === * 這是所有瀏覽器都有 原生JavaScript的AJAX功能 * 面試很喜歡考這個 因為很多人會忘記 1. 宣告一個XMLHttpRequest物件 ```javascript let xhr=new XMLHttpRequest ``` 2. 建立請求的各項設定及實質內容 方法,網址,最後一個可以不填 ```javascript xhr.open( Method, URL, async); ``` 3. 建立得到回應時的各項設定及行為 ```javascript xhr.onload=function(){ var type=xhr.getResponseHeader(“Content-Type”); var status=xhr.status var response=xhr.responseText document.write(response) } ``` 4. 送出請求及傳送內容 ```javascript xhr.send(context); ``` Fetch語法順序 === 1. 建立FETCH請求及實質內容 2. 建立回呼函式(call back function)來處理回應時的各項行為 3. 建立錯誤處理 ```javascript fetch(url,{method:’get’}) .then(function(response){ return response.json() }) .then(function(data){ console.log(data) }) .catch(function(err){ //error }) ``` JQ語法順序 (建立於原生語法的基礎之上) === 1. 利用$.get()方法傳送請求並取得回應(原生) ```javascript $.ajax({ type:get/post/patch/delete/update…, url:"http://.....", success: (callback), error: (callback), data:{json/xml/string}, complete: (callback) }) ``` 2. 上面的方法太麻煩 所以可以簡化成下面的語法 ```javascript= //$.get方法 $.get(url,data,callback) //$.post方法 $.post(url,data,callback) //().load()方法 $(selector).load(url) ``` 2. complete跟success是同樣的意思 但success執行完後才會執行complete 3. 必須JQ CDN才可以使用 axios函式庫語法 === 1. 載入 2. 語法類似JQ跟fetch 所以結合兩者的優點 ```javascript axios.get(url) .then(function(response){ //處理回應 }) .catch(function(err){ //error }) ``` CORS問題 === * 全名為 Cross-Origin Resource Sharing 跨來源資源共享 * 有允許CORS存取的網站才可以讓其他外來人員存取 * 有安全性問題 所以網址不同會檔下 無法存取 * server模擬一般人訪問網站的方式 去存取 把資源拉回server後丟還給使用者 就可以繞開CORS的設定 * 允許一般存取 不允許JS存取