json資料服務器回傳的方法.
在api總指出回傳的格式
代碼如下 |
複製代碼 |
{success;true,data:{clientName: "Fred. Olsen Lines", portOfLoading:"FXT",portOfDischarge: "OSL" } }}} |
需要注意的是這裡的success和data是關鍵字,(姑且這麼叫吧)在data中是資料在用戶端通過
Ext .decode(response.responseText).clientName獲得.第一個回傳資料.這裡證明在用
success: function(response){}函數的時候,參數response是一個json字串,通過Ext .decode解析了data的資料集.
//成功時回叫,第一個參數為XMLHttpRequest對象,第二個參數傳入指定的options
所有,這裡前背景代碼應該這樣統一:
後台(asp):
代碼如下 |
複製代碼 |
response.write "{success:false,data:{msg:'密碼或使用者名稱不可為空!'}}" response.write "{success:true,data:{msg:'登陸成功!'}}" |
前台:
代碼如下 |
複製代碼 |
success: function(response,options ){Ext .MessageBox.alert(' 提示',Ext.decode(response.responseText).msg);}, failure: function(response,options ){Ext .MessageBox.alert('提示','Ext.decode(response.responseText).msg);}, |
還可以:
代碼如下 |
複製代碼 |
Ext .util.JSON.decode(response.responseText); 這 |
個也是對json編碼的解析
Ext.Ajax.request方法
代碼如下 |
複製代碼 |
<SPAN style="FONT-SIZE: medium">Ext.Ajax.request({ url:'findbyid.action', params:{ id:cell.getId() }, success: function(resp,opts) { var respText = Ext.util.JSON.decode(resp.responseText); name=respText.name; oid=respText.id; findbyid(graph,cell,oid,name); //Ext.Msg.alert('錯誤', respText.name+"====="+respText.id); }, failure: function(resp,opts) { var respText = Ext.util.JSON.decode(resp.responseText); Ext.Msg.alert('錯誤', respText.error); } });</SPAN>
|
在Ext開發過程中,基本上時刻需要用到非同步請求,那麼這個請求到底是怎麼執行的呢,我們接下來來探討下
先:Ext.Ajax類繼承了Ext.data.Connection,為Ajax的請求提供了最大靈活性的操作方式
再簡單請求基礎上我們加上一個使用的
說明的是這種請求通常都是放在觸發某個事件的處理方法中的
url:就是我們要請求的路徑
params:裡面的參數用逗號隔開,就是我們要發出請求帶的參數
success:是伺服器處理成功返回
failure:是伺服器處理失敗返回
重點講的就是如何處理傳回值資訊,我們的resp這個參數就顯得非常重要了
resp是Ext構造的一個返回結果對象,如伺服器端返回“this is a test!”(可以通過throw new Exception("this is a test!")簡單實現)。那麼返回將是
如下內容:
代碼如下 |
複製代碼 |
<SPAN style="FONT-SIZE: medium">tId.1 status.200 statusText.OK getResponseHeader.[object Object] getAllResponseHeaders.Server: Apache-Coyote/1.1 Content-Type: text/html;charset=GBK Content-Language: zh-CN Content-Length: 108 Date: Wed, 31 Oct 2007 12:51:23 GMT responseText. <html> <head> <title>錯誤</title> </head> <body> <h1>錯誤:this is a test!</h1> </body> </html> responseXML. argument.undefined</SPAN> |
從上面結果可以看出來,最開始是一些狀態屬性,我們也不常用,不管他。裡面真正常用的是responseText與responseXML兩個屬性,那麼這裡面的responseText內容又被Ext用html封裝了,但使用Ext.MessageBox展示出來正合適;reponseXML將在伺服器端返回“text/xml”類型時使用。若伺服器端返回是“text/json”類型時,用戶端需要使用obj= Ext.util.JSON.decode(result.responseText);進行構造json對象,然後就可以正常使用了
具體操作傳回值 我們用JSON就這麼寫
ServletActionContext.getResponse().setContentType("text/json; charset=utf-8");
ServletActionContext.getResponse().getWriter().write("{success:true,info:'更新資訊成功',name:'" + oo.getName() + "',id:'" + id + "'}");
顯然我這裡返回的是JSON的值了(記住裡面的屬性值一定要加單引號)
var respText = Ext.util.JSON.decode(resp.responseText);
這個就可獲得返回結果對象,要使用屬性的話respText.id等都可直接用了
使用Ext.Ajax.request方法來進行的,該方法可以用來向伺服器端發送一個http請求,並可以在回呼函數中處理返回的結果。往遠程伺服器發送一個HTTP請求,發送Ajax調用的時候該方法的簽名如下:
Ext.Ajax.rquest( [Object options] ) : Number
伺服器的響應是非同步,因此需要在回呼函數中處理伺服器端返回的資料。回呼函數可以定義在request方法調用的參數options中。另外,在 request方法中可以定義Ajax請求的一些其它屬性。參數options是一個對象,該對象包含了Ajax請求所需的各種參數及回調處理參數等。 options中可以包含的各個屬性及含義如下所示:
url String 指定要請求的伺服器端url,預設值為Ajax對象中配置的URL參數值。
params Object/String/Function 指定要傳遞的參數,可以是一個包含參數名稱及值的對象,也可以是name=xx&birthday=1978-1-1類似的url編碼字串,或者是一個能返回上述兩種內容的函數。
method String 指定發送Ajax請求使用的method,可以是GET或POST方式。預設情況下,如果請求中沒有傳遞任何參數則使用GET,否則使用POST。
callback Function 指定Ajax請求的回呼函數,該函數不管是調用成功或失敗,都會執行。傳遞給回呼函數的參 數有三個,第一個options表示執行request方法時的參數,第二個success表示請求是否成功,第三個參數response表示用來執行 Ajax請求的XMLHttpRequest 對象。關於XMLHttpRequest可以通過
查詢詳細的資訊。
success Function 指定當Ajax請求執行成功後執行的回呼函數,傳遞給回呼函數兩個參數,第一個參數response表示執行Ajax請求的XMLHttpRequet對象,第二個參數表示執行request方法時的options對象。
failure Function 指定當請求出現錯誤時執行的回呼函數,傳遞給回呼函數兩個參數,第一個參數response表示執行Ajax請求的XMLHttpRequet對象,第二個參數表示執行request方法時的options對象。
scope Object 指定回呼函數的範圍,預設為瀏覽器window。
form Object/String 指定要提交的表單id或表單資料對象。
isUpload Boolean 指定要提交的表單是否是檔案上傳表單,預設情況下會自動檢查。
headers Object 指定請求的Header資訊。
xmlData Object 指定用於發送給伺服器的xml文檔,如果指定了該屬性則其它地方設定的參數將無效。
jsonData Object/String 指定需要發送給伺服器端的JSON資料。如果指定了該屬性則其它的地方設定的要發送的參數值將無效。
disableCaching Boolean 是否禁止cache