天天看點

AJAX異步--ajax請求AJAX請求

AJAX請求

這篇文章是AJAX異步文章的附加二:

這篇文章我們将的是$.ajax請求來實作異步的操作

$.ajax請求有很多,但我們主講jQuery.ajax(url,[settings])、jQuery.get(url, [data], [callback], [type])、jQuery.post(url, [data], [callback], [type])

在開始講的時候,我們先重新來添加一個視圖,頁面布局我們就直接複制前面的表單布局,修改一下按鈕(見圖表1)最終表單的樣式

AJAX異步--ajax請求AJAX請求

圖表 1

$.ajax()

我們先講通過jQuery裡面的$.ajax({ })方法實作異步

先使用$.ajax()來擷取資料和送出資料。擷取我們可以用之前轉義的方法,這個方法裡面就準備了對應的資料,下面receivData方法則是通過形參的方法來接收資料的

使用$.ajax()從控制器中擷取資料

是我們點選的時候擷取和送出,我們先分别給兩個按鈕一個id

我們則通過id擷取元素,綁定一個點選事件

綁定事件裡面就要發送一個請求,之前我們要var去建立xhr的對象,這裡就不需要了,就直接是$.ajax(),不管什麼方法調用後面都跟着一個小括号

$.ajax({ })方法裡面的東西都叫一個配置項,配置項都是以鍵值對的形式

發送一個請求,首先要知道發送方式是什麼,不管什麼請求,都要指定是get送出還是post送出。再是一個url,送出的位址。請求完了之後則是一個success,success代表的是請求完了之後的回調函數,回調的時候有一個資料,則通過data去接收資料(注意:這個接收資料的名成年可以自己定義,不一定要是data),然後在控制台輸出一下,看我請求到的資料是什麼樣子的

他傳回回來的是一個json的字元串,那我們使用它就必須把json的字元串轉換為js的對象

轉換為js對象之後,給他們對應的指派操作,把資料綁定到表單上面的一個操作

我們先要把input表單元素通過id找到然後點val,在是一個指派,指派裡面有一個name屬性值,在頁面上重新整理點選擷取元素就綁定上去了。

他這裡還有一些配置項

比如:dataType:規定了資料傳回的格式,

如果你配置一個‘html’,那麼他傳回的是一個html的内容,如果你配置的是json,那麼這裡規定傳回的資料就是一個json,是以下面就不需要在轉,就直接輸出data即可

詳情代碼見圖表2

AJAX異步--ajax請求AJAX請求

圖表 2

使用$.ajax()将視圖的表單資料送出到控制器中

通過id選擇器擷取元素,綁定點選事件

在發送請求之前,我要把表單的資料擷取到,怎麼擷取呢?

先定義一個變量然後在通過”$”元素在通過id元素找到input标簽,這擷取的是整個元素,而我隻需要它輸入什麼我擷取的什麼,是以在後面加一個val()這個方法

擷取到資料之後則是去寫我們$.ajax()請求了。$.ajax()請求和上面擷取資料的請求一樣

送出資料有一個屬性叫data,這個data就是你要傳遞的資料可以放到這裡

我們這裡就可以去定一個strData的變量,把我們的資料傳遞過去,這個參數要和控制器裡面接收參數方法的形參資料一樣

然後在$.ajax()放一個data,然後把我們拼接的這個字元串放進來,他就會把我們要送出的資料送出到控制器裡面

有一個serialize表單序列化,他就可以不讓我們把字元串進行一個拼接,它會生成我們類似拼接的這麼一個字元串

如果是序列化的話之前擷取的資料可以不做拼接和擷取

先聲明一個變量,序列化表單就要通過id把表單擷取到,然後則是serialize表單序列化,再在控制台進行一個輸出,這個結構和我們拼接的結構是一樣的

既然是一樣那我們控制器斷一下點,在送出一下,轉到控制器,資料為空,為什麼?

序列化的屬性值和控制器的屬性值不對應,是以這個地方它是接收不到的,因為他們的鍵不相等,鍵不相等就不能接收。是以我們再在控制器裡面通過實體類的方法去接收它,是以我麼接收資料的方式也要進行更改

它還有一個方法,serializeArray:就是把我們序列化的内容序列化成一個數組

它的寫法和表單序列化一樣,隻是序列化的名稱改了

serializeArray和serialize這兩個序列化都是一樣的,隻是一個是序列化成數組,一個是序列化成字元串,要是送出,送出的效果也是一樣的

将視圖的表單資料送出到控制器中的具體代碼見圖表3

AJAX異步--ajax請求AJAX請求

圖表 3

$.get()

下面我們将$.get()簡單來說就是一個get請求,他用來取代複雜的$.ajax的一個方法,它使用起來就更簡單,如果隻是單純的請求,就隻要兩個參數,就是url和callback(回調函數),如果需要送出資料三個參數就可以了,一個url,一個data,一個callback就可以了,type是一個可選參數,是指傳回内容的格式是什麼

通過$.get()方法從控制器中擷取資料

先在form表單裡面在添加兩個新的按鈕。也可以不添加按鈕但是前面寫的$.ajax的資料必須全部登出

先通過id選擇到元素,綁定一個點選事件

使用get的方法就直接一個$.get()裡面給它傳兩個參數url和callback,我們前面在控制器中有一個轉義擷取資料的方法,我們就直接把擷取資料的方法直接資料送出到那個方法裡面,然後再是一個回調函數,在這個函數裡面就可以放一個參數,這個參數就是接收傳回回來的資料,然後在控制台輸出一下,輸出的則是一個json格式的字元串

如果你接收傳回傳回來的就是一個對象了,就在get方法裡面加上第三個參數,在最後面給它一個‘json’傳回類型的格式。如果不寫第三個參數,就要對這個資料進行一個轉換,如何轉換?

Data=json.parse(data)僅供參考  轉換為js對象

轉換為js對象我們就可以對他進行操作,幫他綁定在元素上面,綁定元素則和$.ajax()綁定元素的方法一樣

我們先要把input表單元素通過id找到然後點val,在是一個指派,指派裡面有一個name屬性值,在頁面上重新整理點選擷取元素就綁定上去了。(見圖表4)

AJAX異步--ajax請求AJAX請求

圖表 4

使用$.get()将視圖的表單資料送出到控制器的方法中

點選的時候将表單資料送出到控制器的方法中,還是和前面講的一樣,通過id找到input元素,給它綁定一個點選事件

裡面我們接着給它一個get,給它傳遞三個參數;一個url,一個你要送出的資料(還沒有定義資料我們先用一個大括号表示),一個送出之後的回調函數,回調函數裡面傳遞一個參數

我送出的資料是不是把頁面上擷取的資料進行送出,那我們這邊則定義一個變量通過id把元素選擇到,然後再是點val()。裡面不傳參數,因為我們是把元素裡面的值輸入的内容進行一個擷取

把所有的值擷取到,擷取到值之後,把這些值放到get裡面第二個參數你要送出的資料裡面傳遞過去,我在第二個參數裡面放的是一個大括号,表示我可以把這個資料封裝成一個對象放進去

我們可以通過var obj={ },我這裡就聲明了一個對象,然後在把這個obj放到第二個參數裡面,代替我前面放的那個大括号

建立了這個對象就可以給他指派,對象裡面則是通過鍵值對的形式存儲的,鍵就是你要傳遞過去的對應接收,則和控制器中你送出的位址裡面的屬性對應,值就是前面定義的一個變量

這裡我就是把我們擷取到的值封裝成一個對象,然後把這個對象傳過去

在控制器中送出的方法斷個點,然後看一下我們送出的資料有沒有傳遞過去

這個還可以在改一下,就是把整個對象做為一個參數,放到get裡面第二個參數上面,代替之前的那個obj(見圖表5)

AJAX異步--ajax請求AJAX請求

圖表 5

Get方法講完了就隻有post方法了,post方法和get方法一樣隻是送出的方式不一樣,一個是get,一個是post。我就不一一講了,具體見下面代碼

通過$.post()方法從控制器中擷取資料(見圖表6)

如果使用post方法但是你想要通過get送出那就要在控制器的方法中加上jsonRequestBehavior.AllowGet。

jsonRequestBehavior.AllowGet什麼意思呢?

就是允許get請求。如果不添加jsonRequestBehavior.AllowGet那就不能通過get請求,就算請求到了也不會擷取資料

AJAX異步--ajax請求AJAX請求

圖表 6

通過$.post()方法将視圖中的表單資料送出到控制器的方法中。我這裡是使用序列化表單比前面的要簡單一點(見圖表7)

AJAX異步--ajax請求AJAX請求

圖表 7

繼續閱讀