我想要实现这样的效果:让用户自由拖拽一些draggable的矩形控件,当拖拽进某个droppable区域放下时,客户端要把当前各个droppable区域里都有哪些矩形控件了告诉服务器,服务器根据提交的数据,会传来一些新的draggable矩形控件,供继续拖拽,所以需要向服务器提交数组形式的数据,用a.jsp?id=101这种恐怕不合适,也不想用Ext.util.JSONP.request,于是打算用Ext.Ajax.request,拟把数组形式的数据转化为json格式。
怎么办,上代码(参考sench touch api 关于Ext.Ajax的内容):
//提交数据 var jData = {'records': [{name: 'my record'}, {name: 'another record'}]}; 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) { var obj = Ext.decode(response.responseText); console.dir(obj); }, failure: function(response, opts) { } });
要注意的几个问题: ①使用了jsonData成员后,params的内容将被忽略;
②用jsonData,那么就得method : 'POST' ,注意全大写,不要写成post ,Post ,pOst等奇怪的样子;
圈3 callback:function()如果不注释掉,不论成败都会被执行。
接下来重要的是,服务器端java代码怎么获取和回馈数据:
如果是params:{}里面的数据,用request.getParameter("id")就行了,但取jsonData:{}里面的不行,需要用request.getReader() 代码如下:
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = req.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) {
}
System.out.println ("req.getReader() "+new String(jb));控制台输出了 :
信息: Reloading context [/sel_st]
req.getReader() {"records":[{"name":"my record"},{"name":"another record"}]}
嘿嘿,获取到了。
服务器端经过处理(暂时没处理,返回的是无关的测试数据),返回数据如下:
[{"id":100 ,"sympname": "新症状1" , "belongs": "alternative" },{"id":101 ,"sympname": "新症状2" , "belongs": "alternative" }]
那么上面写的 var obj = Ext.decode(response.responseText); console.dir(obj);这两行代码会work,控制台里输出了:
嘿嘿,反馈成功,以上。
本文介绍了如何在Sencha Touch中实现用户通过拖拽矩形控件到指定区域,并向服务器提交数据的操作。重点讲解了如何通过Ext.Ajax.request方法实现数据的异步提交,并在服务器端如何接收和处理这些数据。
108

被折叠的 条评论
为什么被折叠?



