sencha touch 向服务器提交数据

来源:互联网 发布:安全设置阻止java运行 编辑:程序博客网 时间:2024/05/01 21:07
 sencha touch 向服务器提交数据

我想要实现这样的效果:让用户自由拖拽一些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,控制台里输出了:

Array[2]
  1. 0: Object
    1. belongs: "alternative"
    2. id: 100
    3. sympname: "新症状1"
    4. __proto__: Object
  2. 1: Object
  3. length: 2
  4. __proto__: Array[0]

嘿嘿,反馈成功,以上。

原创粉丝点击