Ext.Ajax.request和formPanel.getForm().submit()兩種提交方法的異同:
1、 相同點:
a) 都是使用非同步提交的方式;
b) 預設都是使用POST方式來提交資料;
2、 不同點:
a) Request方法不可以使用waitMsg屬性來設定在等待響應過程中顯示的資訊,而submit方法提交時這個設定是可用的(可以看到效果,而前面說的不可用是指設定了看不到效果);
b) Request方法必須將要提交的參數手動組織好然後作為名為params的參數的值才能提交到伺服器,而submit方法會將表單內所有input元素組織好提交;
c) Request方法提交時,回呼函數中會傳入兩個參數(response,option),前者是請求的響應對象,伺服器對於請求的響應資訊可以通過它的responseText屬性得到(也就是response.reponseText就可以得到伺服器返回的字串),第二個參數是提交的參數對象,一般不需要用到,如果要讀取返回的響應資訊,要先用Ext.decode方法將其resonseText屬性值轉換成json對象才可以讀取;如伺服器端返回的是一個json格式的字串:{success:true,msg:'sample'},則用戶端要讀取這個資訊,可以這樣:var returnResult = Ext.decode(response.responseText); alert(returnResult.msg);submit的情況下回呼函數參數是(form,action),如果想讀取響應資訊,只需要訪問action對象的result屬性就可以了,像上述同樣的返回資訊,讀取的樣本:alert(action.result.msg);不過有一點要注意的是,當網路資料轉送失敗或資訊丟失的情況下,action中可能沒能取到伺服器返回的訊息,也就是說,result不一定會存在msg屬性,如果不經判斷就訪問,有可能會引發異常;
d) Request方法提交後,無論返回的json結果中success屬性是否為true,回呼函數都會到success:function()裡面執行,所以在這種情況下,必須在success方法體裡再到result.success進行判斷以得到真正的執行結果,所以,只有在出現網路錯誤,連不到伺服器或找到響應頁面(404)時,failure回調方法才會被執行;而Submit方法在返回的結果中,如果success為true的,就會自動執行success:function,如果是false,則會執行failure:function了,所以沒有必要再在裡面判斷success是true或false,另,跟request時一樣,當出現網路錯誤或其它未知錯誤時,failure:function也會被執行;
備忘:造成這種結果的原因不難理解,因為在上面第三點提到,request請求的情況下返回的結果是以字串的形式擷取的,也就是說ext並未到其進行解析,所以它也識別不了裡面返回的結果是成功還是失敗,只是把一個字串帶回來了,而submit方法提交時,返回的action.result對象已經將響應資訊解析了,它能讀取其中的success屬性的值,所以能夠根據不同的success屬性來執行相應的回調方法)
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/ajax/