詳解Sencha Touch如何向服務器提交數據
Sencha Touch如何向服務器提交數據是本文要介紹的內容,主要是來了解Sencha Touch是如何來發送數據的。在壇子里看到一篇這樣的文章,與朋友們分享一下,具體內容來看本文詳解。
我想要實現這樣的效果:讓用戶自由拖拽一些draggable的矩形控件,當拖拽進某個droppable區域放下時,客戶端要把當前各個droppable區域里都有哪些矩形控件了告訴服務器,服務器根據提交的數據,會傳來一些新的draggable矩形控件,供繼續拖拽,所以需要向服務器提交數組形式的數據,用a.jsp?id=101這種恐怕不合適,也不想用Ext.util.JSONP.request,于是打算用Ext.Ajax.request,擬把數組形式的數據轉化為json格式。
怎么辦,上代碼(參考senchtouchapi關于Ext.Ajax的內容):
- viewplaincopytoclipboardprint?
- //提交數據
- varjData={'records':[{name:'myrecord'},{name:'anotherrecord'}]};
- Ext.Ajax.request({
- url:'http://124.16.139.80/sel_st/UpdateSympsServlet',
- //callback:function(){
- //console.log('Ext.Ajax.request');
- //},
- method:'POST',
- params:{
- records:'something'
- },
- jsonData:jData,
- success:function(response,opts){
- varobj=Ext.decode(response.responseText);
- console.dir(obj);
- },
- failure:function(response,opts){
- }
- });
- //提交數據varjData={'records':[{name:'myrecord'},{name:'anotherrecord'}]};
- Ext.Ajax.request(
- {url:'http://124.16.139.80/sel_st/UpdateSympsServlet',
- //callback:function(){//console.log('Ext.Ajax.request');//
- },
- ethod:'POST',params:{records:'something'},
- jsonData:jData,success:function(response,opts){varobj=Ext.decode(response.responseText
- );console.dir(obj);
- },failure:function(response,opts){}
- }
- );
要注意的幾個問題:①使用了jsonData成員后,params的內容將被忽略;
②用jsonData,那么就得method:'POST',注意全大寫,不要寫成post,Post,pOst等奇怪的樣子;
圈3callback:function()如果不注釋掉,不論成敗都會被執行。
接下來重要的是,服務器端java代碼怎么獲取和回饋數據:
如果是params:{}里面的數據,用request.getParameter("id")就行了,但取jsonData:{}里面的不行,需要用request.getReader()代碼如下:
- StringBufferjb=newStringBuffer();
- Stringline=null;
- try{
- BufferedReaderreader=req.getReader();
- while((line=reader.readLine())!=null)
- jb.append(line);
- }catch(Exceptione){
- }
- System.out.println("req.getReader()"+newString(jb));
- StringBufferjb=newStringBuffer();
- Stringline=null;try{
- BufferedReaderreader=req.getReader();
- while((line=reader.readLine()
- )!=null
- )
- jb.append(line);
- }
- catch(Exceptione){}System.out.println("req.getReader()"+newString(jb));
控制臺輸出了:
- 信息:Reloadingcontext[/sel_st]
- req.getReader(){"records":[{"name":"myrecord"},{"name":"anotherrecord"}]}
嘿嘿,獲取到了。
服務器端經過處理(暫時沒處理,返回的是無關的測試數據),返回數據如下:
- [{"id":100,"sympname":"新癥狀1","belongs":"alternative"},{"id":101,"sympname":"新癥狀2","belongs":"alternative"}]
那么上面寫的varobj=Ext.decode(response.responseText);console.dir(obj);這兩行代碼會work,控制臺里輸出了:
- Array[2]
- 0:Objectbelongs:"alternative"
- id:100
- sympname:"新癥狀1"
- __proto__:Object1:Objectlength:2
- __proto__:Array[0]
嘿嘿,反饋成功,以上。
小結:解析Sencha Touch向服務器提交數據的內容介紹完了,希望通過本文的學習能對你有所幫助!