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向服务器提交数据的内容介绍完了,希望通过本文的学习能对你有所帮助!