1.下載引入jQuery
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> 2.$.ajax({ url:'/../', type:'GET', data: 1.value不能字典 {'k1':'v1','k2':[1,2,3,],'k3':JOSN.stringify({})} 2.$('').serialize() dataType:'JSON',#text,html,xml traditional:true, success:function(arg){ //arg是對象 } error:function(result){ } })
1.url: 要求爲String類型的參數,(默認爲當前頁地址)發送請求的地址。 2.type: 要求爲String類型的參數,請求方式(post或get)默認爲get。注意其餘http請求方法,例如put和delete也可使用,但僅部分瀏覽器支持。 3.timeout: 要求爲Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。 4.async: 要求爲Boolean類型的參數,默認設置爲true,全部請求均爲異步請求。若是須要發送同步請求,請將此選項設置爲false。注意,同步請求將鎖住瀏覽器,用戶其餘操做必須等待請求完成才能夠執行。 5.cache: 要求爲Boolean類型的參數,默認爲true(當dataType爲script時,默認爲false),設置爲false將不會從瀏覽器緩存中加載請求信息。 6.data: 要求爲Object或String類型的參數,發送到服務器的數據。若是已經不是字符串,將自動轉換爲字符串格式。get請求中將附加在url後。防止這種自動轉換,能夠查看 processData(防止自動轉換)選項。對象必須爲key/value格式,例如{foo1:"bar1",foo2:"bar2"}轉換爲&foo1=bar1&foo2=bar2。若是是數組,JQuery將自動爲不一樣值對應同一個名稱。例如{foo:["bar1","bar2"]}轉換爲&foo=bar1&foo=bar2。 7.dataType: 要求爲String類型的參數,預期服務器返回的數據類型。若是不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,並做爲回調函數參數傳遞。可用的類型以下: xml:返回XML文檔,可用JQuery處理。 html:返回純文本HTML信息;包含的script標籤會在插入DOM時執行。 script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),全部post請求都將轉爲get請求。 json:返回JSON數據。 jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換後一個「?」爲正確的函數名,以執行回調函數。 text:返回純文本字符串。 8.beforeSend: 這個參數主要是爲了在向服務器發送請求前,執行一些操做。要求爲Function類型的參數,發送請求前能夠修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中若是返回false能夠取消本次ajax請求。XMLHttpRequest對象是唯一的參數。 function(XMLHttpRequest){ this; //調用本次ajax請求時傳遞的options參數 } 9.complete: 要求爲Function類型的參數,請求完成後調用的回調函數(請求成功或失敗時均調用)。參數:XMLHttpRequest對象和一個描述成功請求類型的字符串。 function(XMLHttpRequest, textStatus){ this; //調用本次ajax請求時傳遞的options參數 } 10.success: 要求爲Function類型的參數,請求成功後調用的回調函數,有兩個參數。 (1)由服務器返回,並根據dataType參數進行處理後的數據。 (2)描述狀態的字符串。 function(data, textStatus){ //data多是xmlDoc、jsonObj、html、text等等 this; //調用本次ajax請求時傳遞的options參數 } 11.error: 要求爲Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)。ajax事件函數以下: function(XMLHttpRequest, textStatus, errorThrown){ //一般狀況下textStatus和errorThrown只有其中一個包含信息 this; //調用本次ajax請求時傳遞的options參數 } 12.contentType: 要求爲String類型的參數,當發送信息至服務器時,內容編碼類型默認爲"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。 13.dataFilter: 要求爲Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。 function(data, type){ //返回處理後的數據 return data; } 14.dataFilter: 要求爲Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。 function(data, type){ //返回處理後的數據 return data; } 15.global: 要求爲Boolean類型的參數,默認爲true。表示是否觸發全局ajax事件。設置爲false將不會觸發全局ajax事件,ajaxStart或ajaxStop可用於控制各類ajax事件。 16.ifModified: 要求爲Boolean類型的參數,默認爲false。僅在服務器數據改變時獲取新數據。服務器數據改變判斷的依據是Last-Modified頭信息。默認值是false,即忽略頭信息。 17.jsonp: 要求爲String類型的參數,在一個jsonp請求中重寫回調函數的名字。該值用來替代在"callback=?"這種GET或POST請求中URL參數裏的"callback"部分,例如{jsonp:'onJsonPLoad'}會致使將"onJsonPLoad=?"傳給服務器。 18.username: 要求爲String類型的參數,用於響應HTTP訪問認證請求的用戶名。 19.password: 要求爲String類型的參數,用於響應HTTP訪問認證請求的密碼。 20.processData: 要求爲Boolean類型的參數,默認爲true。默認狀況下,發送的數據將被轉換爲對象(從技術角度來說並不是字符串)以配合默認內容類型"application/x-www-form-urlencoded"。若是要發送DOM樹信息或者其餘不但願轉換的信息,請設置爲false。 21.scriptCharset: 要求爲String類型的參數,只有當請求時dataType爲"jsonp"或者"script",而且type是GET時纔會用於強制修改字符集(charset)。一般在本地和遠程的內容編碼不一樣時使用。
$.ajax({ url:'/../', type:'GET', data:{}, dataType:'JSON', success:function(arg){ //arg是對象 } })
ajax中的datajavascript
a.只是字符串或數字 $.ajax({ url:'/../', type:'GET', data:{‘k1':'v1'}, dataType:'JSON', success:function(arg){ //arg是對象 } }) b.包含數組 $.ajax({ url:'/../', type:'GET', data:{'k1':JSON.stringify([1,2,3,4}), dataType:'JSON', traditional:true, success:function(arg){ //arg是對象 } }) c.傳字典 $.ajax({ url:'/../', type:'GET', data:{'k1':JSON.stringify({})}, dataType:'JSON', success:function(arg){ //arg是對象 } })
補充:獲取表單數據css
注:獲取表單內容:-var data = $('#form表單的ID').serialize(); $,ajax({ ... data:$('#form表單的ID').serialize(),
python序列化 字符串 = json.dumps(對象) --對象 ->字符串 對象 = json.loads(字符串) --字符串 ->對象 javascript: 字符串 = JSON.stringify(對象) 對象 ->字符串 對象 = JSON.parse(字符串) 字符串->對象 應用場景 數據傳輸時 發送:字符串 接收:字符串 -> 對象
JSON.stringify(字典) == json.dumps JSON.parse(字符串) == json.loads a = {'k':'v','k1':'v1'} {k: "v", k1: "v1"} str = JSON.stringify(a) "{"k":"v","k1":"v1"}" json_str = JSON.parse(str) {k: "v", k1: "v1"}
新URL方式: -獨立的頁面 -數據量大,條目多 問題:提交時,保留以前的內容??? 對話框方式: -數據量小或條目少 -增長,編輯 -Ajax:考慮,當前頁:td中自定義屬性 -頁面(***) 刪除: 對話框
原生Ajax:XMLHttpRequest對象:html
var xhr = new XMLHttpRequest() xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ // 已經接收到所有響應數據,執行如下操做 var data = xhr.responseText; console.log(data); } }; xhr.open('POST', "/test/", true); // 設置請求頭 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8'); // 發送請求 xhr.send('n1=1;n2=2;');
1.建立project --django_ajax 2.建立APP --app01 3.配置 --靜態文件 --模板路徑 4.students -->students.html 5.Bootstrap:提供現成的樣式 + 效果 6.FontAwesome:提供圖標 7./students/ -->students函數(班級和學生列表) -->students.html 8.$.ajxa({ url:'/../', type:'POST', data:{..}, seccess:function(arg){ //arg字符串 // var obj = JSON.parse(arg) } })
-原生 -jQuery 以上兩種方式可利用formData對象,來封裝用戶提交的數據 -iframe+form:兼容性好 *****iframe+form****8
- 爲何會有跨域? 瀏覽器的同源策略: XMLHttpRequest - 繞過瀏覽器同源策略就能夠跨域。 巧妙的機制:JSONP 同源策略會阻止ajax請求;不阻止具備src屬性的標籤 JSONP:利用建立script塊,在期中執行src屬性爲:遠程url 函數(返回值) 動態建立script標籤 <script src='xxxx'></script>
function submitJsonp1() { var tag = document.createElement('script'); tag.src = 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list&_=1454376870403'; $(document.head).append(tag); document.head.removeChild(tag); } function list(arg) { console.log(arg); } function submitJsonp2() { $.ajax({ url:'http://www.jxntv.cn/data/jmd-jxtv2.html?_=1454376870403', type:'GET', dataType:'jsonp', jsonp:'callback', jsonpCallback:'函數', }) }
缺點:只能處理get請求java
跨域錯誤信息python
Failed to load http://127.0.0.1:8000/api/v1/course/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
原理:返回信息的時候加上一個特殊的響應頭jquery
django實現:在中間件中加一個響應頭ajax
from django.utils.deprecation import MiddlewareMixin class CORSMiddleware(MiddlewareMixin): """ cors跨域實現簡答請求 跨域:向不一樣域名或端口不一樣的地址發送請求) """ def process_response(self, request, response): # 添加響應頭 # 容許你的域名來獲取個人數據 response['Access-Control-Allow-Origin'] = "*" # 容許你攜帶Content-Type請求頭 response['Access-Control-Allow-Headers'] = "Content-Type" # 容許你發送DELETE,PUT response['Access-Control-Allow-Methods'] = "DELETE,PUT" return response
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'api.cors.CORSMiddleware', ]