ajax--實現非同步請求,接受響應及執行回撥

給魚喂貓糧發表於2021-05-05

ajax最大的優點是在不重新載入整個頁面的情況下,可以與伺服器交換資料並更新部分網頁的內容

ajax指是一種建立互動式網頁應用的網頁開發技術,其實就是實現前後端互動。

1)ajax是非同步javascript,非同步的意思即非阻塞,就像執行緒,在程式碼執行到ajax請求時,它會分成兩條線,一條線去執行ajax請求裡面的內容,另一條線去執行主程式(即ajax請求後面的程式碼),當然我們可以因需要非同步設定成同步(即在執行到ajax請求時,將阻塞執行完ajax請求後,再去執行ajax外,後面的程式碼)

2)注意ajax請求是由jquery發起的,因此用於jquery程式碼塊中。

3)執行相應的檢視函式(這裡是在一個py,php等檔案建立一個檢視函式,或者class類,給這個檢視函式分級設定一個url地址,ajax請求中的url即填寫完整的url地址),返回json內容。

4)執行相應的回撥函式(即返回成功後的執行success裡面的 js,jquery去影響web頁面),通過判斷 json 內容,進行相應的處理。

ajax不需要任何瀏覽器外掛

現在我們搭建一個伺服器環境,為什麼要搭建伺服器環境呢?因為ajax請求一般都是需要伺服器呼叫資料庫。現在這裡有個比較方便的軟體  -- wampserver 

這個wampsever就是在window下的apache、php和mysql的伺服器軟體

這裡我們需要安裝wampsever  安裝過程的具體步驟自己在百度中找教程(最好不要安裝在C盤,找個記憶體多一點的盤安裝)

在安裝的資料夾中找一個www的資料夾,www檔案就是網站內容所在區域    本地IP:127.0.0.1 埠號80  本地域名locolhost

在pycharm中open開啟www檔案,在此檔案中寫html,css,js,php等。

ajax要有後臺伺服器,可以用java,python,php搭建一個後臺伺服器。

 

寫前端html檔案的時候的用法:$.ajax({    })。$.ajax是所有ajax方法中最底層的方法。所有其他的方法都是基於$.ajax()方法的封裝。

此方法中的引數有:(這裡只寫了一部分)注意都要用引號引住。

引數 型別 說明
url   為string(因此要用引號引起來) 傳送請求的地址
 type string 請求的方式:post或get請求。預設為get請求
data Object或string 傳送伺服器的資料,鍵值對,字串或物件,這裡post請求有此引數,get請求直接在地址處?後面傳參即可
dataType string 後端返回給前端的資料型別,比如html,xml,json。本來是string,在ajax請求時設定dataType為json,將字串;型別變為json型別
success function 請求成功後呼叫的回撥函式,需要操作的東西一般在這裡寫    用法success:function(e 這個字母e可以是其他英文){寫內容}    注意這個()裡面的e或者說其他東西就是後端HttpResponse或者JsonResponse返回的東西,這裡與dataType有關
error function 請求失敗時呼叫的回撥函式
async Boolean 是否非同步處理,預設為True,false為同步處理

 

 

 

 

 

 

 

 

 

 

 

post請求中引數data的兩種寫法:

1)“後端要接收的引數名=”+前端某個input的 val()或value值+“&後端要接收的引數名=”+前端的input中的值    例>>>

2)字典傳參    {“後端要接收的引數名”:前端某個input的 val()或value值  ,"後端要接收的引數名":前端的input中的值 }    例>>>

 

get請求中前端向後端傳參的方法

 

 

 

 

在post請求進行前後端資料的交換,python後端 request.POST.get(“前端給後端要接收的引數在data時起名,如上 un 和 pa ”)  接收前端的資料,當然這是對POST請求時的接收方式,get請求時,則將POST改為GET即可。

這裡就是後端接收上圖前端資料的方法  

 

 下圖是實現前後端互動時前端需要的操作,這裡還設定了同步

 

 

 

另外我們可以直接  0$.get()  或  $.post()

 

先說$.get()請求  (引數之間用逗號隔開)

第一個引數:請求的介面,即要訪問的地址

第二個引數:請求介面時攜帶的引數  可以是字典的形式傳參      

      或者這樣傳參:

 

 

第三個引數:介面請求成功後的回撥引數,即原本$.ajax()中的success後面的function()

 第四個引數:介面返回的資料型別,即設定後端返回給前端返回的資料型別,本來不管後端返回是HttpResponse或者JsonResponse,沒有前端這個引數都會顯示後端返回的是字串型別,有了這個引數,就可以使字串變成該有的形式,比如這裡寫“json”,後端傳的資料就變成了 json 型別

 

 

 

$.post()的相關用法:(跟$.get()的用法類似)

第一個引數:請求的介面,即要訪問的地址

第二個引數:請求介面時攜帶的引數  可以是字典的形式傳參

第三個引數:介面請求成功後的回撥引數,即原本$.ajax()中的success後面的function()

 

 

現在我們先講一下用php做一個後臺伺服器(這裡為什麼先講一下用php做後臺伺服器呢?因為用python做後臺伺服器需要的東西有點多,暫且先拿php用一下)

寫php檔案:在www中新建立一個file文件>>>此文件以  <?php  開頭 ,以  ?>  結尾。第一個注意點執行此檔案時要開啟wampsever軟體

php有一個名句--遍地是黃金。  變數都是由$為開頭的。

第一步:在php檔案中獲取前端傳遞過來的資料。這裡注意在php檔案中的變數名由$開頭的變數名,前端是post請求則在獲取的時候$_POST獲取,前端是get請求則用$_GET獲取(方法例下--$name=$_POST['在前端傳遞來的資料'])

第二步:在資料庫中查詢(這裡先不寫)

第三步:根據資料庫查詢的結果不同,返回給前端不同的資料。

第四個引數:介面返回的資料型別。

 

 

 

還有一個知識點:你發現在jquery中收集表單中的資料時,需要對每個標籤$()   ,這裡有個快速收集表單提交的資料的方法

serializeArray()可以很方便的收集表單裡面的資料      例如  這裡表單有id屬性可以$('input'),也可以$("#register").serializeArray()收集表單資料

 

 收集的資料為 [{},{},...]   (列表巢狀字典的形式)型別

 

 

 

 

 

 還有一個ajax中涉及到的知識點:跨域

 什麼是跨域呢?比如說自己懶得弄介面了,去網上找個現成的,(比如要在前端弄個天氣預報板塊,自己不寫後端,直接用網上免費的一些網站)。

例如 >>>  在wampserver中瀏覽器輸入 127.0.0.1:80 和 輸入localhost:80 都能開啟wampserver的www檔案(wampserver的首頁),127.0.0.1是它的ip地址 ,localhost是它的域名。但在瀏覽器下訪問的是127.0.0.1,而ajax請求的是localhost時,會報錯。

這時我們只需在後端寫下下面兩個程式碼即可實現跨域:

 

 

 

 

 

 

 

 

 

 

 

 

相關文章