關於web中ajax非同步互動學習(二)

2021-09-03 07:43:28 字數 1364 閱讀 1786

今天在寫**的問題:

前台通過ajax和後台的ssm框架進行互動,進行測試時發現,後台已經正常進入controller,並且正常進入對應的方法,也正確的返回了對應的資料,但是,前台ajax總是會進入到error的function裡面。

還是老辦法,一步一步解決問題。

定位問題:既然每次都進error的function裡,那我們就吧error的function的引數列印出來,ajax的error function的引數有三個,分別為:error:function(jqxhr,textstatus,errorthrown)

上面為這三個引數的具體含義。

知道這些引數的含義,那麼我們就可以在進入error:function的時候把它們在控制台console.log()出來,這裡我只列印出來以下4項:

console.log(jqxhr.status);

console.log(jqxhr.readystate);

console.log(jqxhr.responsetext);

console.log(jqxhr.statustext);

然後自己又進行了一次測試,這次可以在控制台看到readystate---4,正常,status--200,正常,但是resposetext提示下面這個異常,unexpected token in json at postion 4,後面緊接著一句,parse error。

想了很久,忽然想到,可能action裡的方法上沒有加@responsebody這個註解,一去檢查,果然,問題找到了,加上註解就可以正常返回了。

總結:平時responsebody註解沒少用,可是自己沒有想過他是幹嘛用的,其實他就是乙個將你返回的資料以json形式返回給前台,當然這裡返回的型別不僅僅是string,還有list,map,vo,等等。

但是當我們方法返回的是modelandview時,是不需要這個註解的

最後,感謝這位博主的分享。

2019-3-4更新:

今天在呼叫ajax時候出現了一些問題,宣告了三個全域性變數,然後將ajax的結果賦值給這三個全域性變數,最後將這三個全域性變數當作乙個陣列中的元素的值,如下圖:

這裡的問題是我最終列印陣列元素的值,發現本該有值的全域性變數為undefined,我在ajax中success:function()明明已經賦值了,為什麼還沒有呢?原因是,一開始我沒有加async屬性,它是預設為true的,所以它不會等url請求完畢,他會直接進入下一步,所以就造成了這種情況,以前遇到過,但是忘記做記錄了,特此記錄下。

ajax非同步互動

四部曲 一 建立非同步物件 二 開啟與伺服器的連線 僅僅開啟連線,並沒有傳送請求 xmlhttp.open 用來開啟與伺服器的連線,需要三個引數 請求引數 get post 請求的url 指定伺服器端的資源,例如 homework index.jsp 請求是否為非同步 如果true,傳送非同步請求 ...

Ajax 非同步互動

非同步互動 建立xmlhttprequest物件 呼叫xmlhttprequest物件的open 方法 引數第二個引數 表示當前請求的伺服器端位址鏈結 呼叫xmlhttprequest物件的send 方法 引數利用xmlhttprequest物件的onreadystatechange事件 伺服器端的...

原生ajax 非同步互動

實現ajax非同步互動步驟 建立xmlhttprequest核心物件 function getxhr else return xhr 與伺服器端建立連線 使用xmlhttprequest物件的open method,url 方法 method 設定當前請求的型別 url 設定當前請求的位址 如果是p...