ExtJS之Ext.Ajax.request方法如何返回值的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExtJS之Ext.Ajax.request方法如何返回值的处理相关的知识,希望对你有一定的参考价值。

function getStateCount(isId)
var url = "$Context/applice/kpi/targetBookList.action?Id="+isId;
Ext.Ajax.request(
url: url,
async : true,
success: function(resp)
var respText = Ext.util.JSON.decode(resp.responseText);
弹出respText时候是[object Object],[object Object]
alert(respText.tbSrsg);//这个直接就是undefined
本身的List我是在后台过的,代码如下:
if (plist.size()>0)
Struts2Util strus2util = new Struts2Util();
HttpServletResponse Response = strus2util.getResponse();
//ServletOutputStream os = Response.getOutputStream();

PrintWriter pw = Response.getWriter();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new net.sf.json.util.PropertyFilter()
public boolean apply(Object source, String name, Object value)
if(name.equals("perTargetYear"))
return true;
else
return false;

);
net.sf.json.JSONArray ja=net.sf.json.JSONArray.fromObject(plist,jsonConfig);
//os.print(ja.toString());//需要将List转换成json
//os.close();
pw.print(ja.toString());
pw.close();

return null;

求高手指点 我该怎么出来这个数据?才可以让他把我List里面的对象变出来成为一个JSON类型的数据呢?

其实你是对的。但是因为你传的是list所以才错。你应该传个Model对象。Model有有2个属性total、list,分别代表list.size()和list。让后再你Model Json化再传到后台。参考下面代码
JSONObject array = JSONObject.fromObjec(model);
HttpServletResponse resp = ServletActionContext.getResponse();
PrintWriter out = null;
System.out.println("++++"+array.toString());
try
out = resp.getWriter();
out.print(array);
out.flush();
out.close();
catch (IOException e)
e.printStackTrace();


这时你就可以用
var respText = Ext.util.JSON.decode(resp.responseText);然后你可以用alert输出respText.total和respText.list[0].tbSrsg.相信你看到输出结果会豁然开朗的。追问

你所谓的Model是一个数组?还是?给Model是怎么赋值的呢?

追答

Model是一个类啊
public class Model
private int total;
private List root; //Object 放你需要的那个类
public void setTotal(int total)
this.total=total;

.....

这个类必须这样有这样2个属性,名字不能改。

参考技术A 网上好多的json包 可以直接转换类的list 为json形式 后台就直接用out对象去set了 前台要看你的技术了 ext嘛
var ss=Ext.util.JSON.decode(resp.responseText);
ss点 什么什么的就可以用了
参考技术B 后台返回的是一个list,的数据转换成的json串.
var respText = Ext.util.JSON.decode(resp.responseText);

经过这句后respText 应该是一个数组.
if(respTest.length)
alert(respText[0].tbSrsg)//试试这样行不

将 EXTJS AJAX 方法从 GET 更改为 POST 将导致任何性能问题

【中文标题】将 EXTJS AJAX 方法从 GET 更改为 POST 将导致任何性能问题【英文标题】:Changing EXTJS AJAX method from GET to POST will cause any performance problems 【发布时间】:2013-08-27 01:41:17 【问题描述】:

我有一个这样的 extjs 请求:

Ext.Ajax.request(
    url: someUrl,
    method: "GET",
    params: paramArray,         
    success: function(response)
        var responseText = response.responseText;
        //DO STUFF  
    ,
    failure: function(response ) 
            // DO STUFF
            
); // end of ajax call

现在因为方法是“GET”,所以 url 中的 pf 参数数量是有限的。解决这个问题的最佳方法是什么?如果我只是将其更改为“POST”,它会导致任何副作用吗? (性能差等)。该方法在逻辑上应该是“GET”,因为它不是更新,只是获取,但为了解决我的参数问题,我想更改为“POST”。

除非是诅咒,否则这个问题有一个标准的解决方案。

【问题讨论】:

【参考方案1】:

我找到了答案here

POST 的性能比 GET 差

【讨论】:

以上是关于ExtJS之Ext.Ajax.request方法如何返回值的处理的主要内容,如果未能解决你的问题,请参考以下文章

逆向工程使用 Ext.Ajax.request 的跨域 POST 请求

Ext Js,Ext.Ajax.request 在移动设备上不起作用

在 Ext JS 中未定义 request.xhr

在 Chrome 中超时 Ext.Ajax.request 后未捕获的异常

extjs ajax 可以上传文件吗

将 EXTJS AJAX 方法从 GET 更改为 POST 将导致任何性能问题