如何将Ext.Ajax.request请求 返回的值赋值给全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Ext.Ajax.request请求 返回的值赋值给全局变量相关的知识,希望对你有一定的参考价值。

Ajax是异步的,所以赋值是成功完成了的,但是大部分情况下是在尝试去使用result全局变量之后才发生赋值操作,因此是没有保证的。所以,针对Ajax请求返回的数据,不能这样使用,建议还是在回调函数中直接操作吧。如果一定要这样用,可以使用一个递归的setTimeout不断去checkAjax请求是否已经完成(result是否已经被赋值),如果已经完成就使用result的值,退出递归,否则继续。 参考技术A 方法1:先设置同步在进行Ajax操作//在全局或某个需要的函数内设置Ajax异步为false,也就是同步$.ajaxSetup(async:false);//然后再进行你的Ajax操作$.post(地址,参数,function(data,status)if(status=="success")//赋值给全局变量elsealert("wrong"););方法2:直接用$.ajax$.ajax(type:"post",url:地址,data:"参数"+参数的值,async:false,success:function(data)//赋值给全局变量;); 参考技术B 你可以传递一个对象过去

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)//试试这样行不

以上是关于如何将Ext.Ajax.request请求 返回的值赋值给全局变量的主要内容,如果未能解决你的问题,请参考以下文章

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

Ext.ajax.request 不能在 jsonData 中使用 0

在 Ext JS 中未定义 request.xhr

如何将ajax请求放入sencha touch中的变量中?

ExtJS 4.2.1 模拟 Ext.Ajax.request

Ext.Ajax的用法