将服务器(JSON对象)的响应转换为extjs中的字符串
*在我们的代码中,ExtJS页面中的参数被传递到Spring3控制器,在那里我们有业务逻辑。然后在控制器中,使用getWriter.write设置响应对象,并在ExtJS页面中检索响应。 问题:在解码响应时,Firebug在使用Ext.util.JSON.decode时显示错误,因此我们不得不使用Ext.decode来解码来自服务器的响应。但是Ext.decode给出了一个值:object。我需要将其转换为字符串或格式。 控制器代码:将服务器(JSON对象)的响应转换为extjs中的字符串,json,spring-mvc,extjs4,Json,Spring Mvc,Extjs4,*在我们的代码中,ExtJS页面中的参数被传递到Spring3控制器,在那里我们有业务逻辑。然后在控制器中,使用getWriter.write设置响应对象,并在ExtJS页面中检索响应。 问题:在解码响应时,Firebug在使用Ext.util.JSON.decode时显示错误,因此我们不得不使用Ext.decode来解码来自服务器的响应。但是Ext.decode给出了一个值:object。我需要将其转换为字符串或格式。 控制器代码: import java.io.IOException; im
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping
public class SampleController {
@RequestMapping(value = "/login.htm",method = RequestMethod.POST)
@ResponseBody
public void validateCredentials(@RequestParam("user") String user,
@RequestParam("password") String password,HttpServletResponse response) {
boolean flag = false;
String resultString = null;
try {
response.setContentType("application/json");
response.setHeader("Content-Type", "text/html, charset=utf-8");
if (user.equals(password)) {
flag = true;
resultString = "{success:true}";
} else {
flag = false;
resultString = "{success:false}";
}
response.getWriter().write(resultString);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ext JS Login form :
Ext.onReady(function(){
function submit(button,event){
var uname=Ext.getCmp('user').getValue();
alert("1"+uname);
var passWord=Ext.getCmp('password').getValue();
Ext.Ajax.request({
url: 'login.htm',
method :'POST',
params: {
user:uname,
password:passWord
},
success: function(result,request) {
var jresp = Ext.JSON.decode(result.responseText);
//Ext.JSON.decode stores object Object in jresp. Our requirement is converting jresp to String or boolean
console.log('Success'+jresp);
},
failure: function(response, request) {
var jresp = Ext.JSON.decode(result.responseText);
console.log(jresp.error);
console.log('server-side failure with status code 8 ' + response.status);
}
});
}
var myform = new Ext.form.FormPanel({
title:'Login form',
frame:true,
width:400,
height: 250,
url:'login.htm',
method:'POST',
renderTo:'div1',
items:[
{
xtype:'textfield',
fieldLabel:'user',
inputType:'user',
allowBlank:false,
minLengthText:'3',
id:'user',
name:'user'
},
{
xtype:'textfield',
fieldLabel:'password',
inputType:'password',
allowBlank:false,
minLengthText:'3',
id:'password',
name:'password'
}
],
buttonAlign:'center',
buttons:[
{
text:'reset',handler:function(){myform.getForm().reset();}
},
{
text:'Login',
handler: submit
}
]
});
});
在解码响应时,Firebug在使用
所以我们不得不使用Ext.decode来解码我们的
来自服务器的响应
出现错误是因为在ExtJS4中使用了错误的对象Ext.JSON.decode对数据进行编码,而不是Ext.util.JSON.decode,因为ExtJS3使用Ext.util.JSON.decode对JSON字符串进行解析,所以会出现这种混乱,但是的,故障保护的方法是使用Ext.decode,这是ExtJS3和ExtJS4中正确函数的简写
但是Ext.decode给出了一个值:object。我需要把它转换成
字符串或格式
这是正确的,因为您生成的响应类似于“{success:true}”
,所以当您解析该JSON字符串时,您将得到如下结果
var jresp = Ext.JSON.decode(result.responseText);
console.log('Success'+jresp.success);
数据={'success':true}
因此,您可以使用数据获取布尔值。成功
最后的代码如下所示
var jresp = Ext.JSON.decode(result.responseText);
console.log('Success'+jresp.success);
在SpringMVC中使用此字符串生成响应的还有一件事
resultString=“{success:true}”
这不是一个有效的json字符串,所以您需要将对象的键用双引号括起来,如下所示
var jresp = Ext.JSON.decode(result.responseText);
console.log('Success'+jresp.success);
resultString=“{\“success\”:true}”
为什么不传递一个包含javascript(ExtJs)中所需的所有字段的模型实例呢?您可以使用jackson将您的模型转换为JSON 只需在appContext中声明转换器: 包括杰克逊的罐子
您还可以将成功和消息放入模型中。为简单起见,使用带有success和message字段的抽象ExtJsModel,并使您的所有模型扩展同一个模型。您可以像这样向extjs发送响应。然后使用extjs解码器。 这是代码 var jresp=Ext.util.JSON.decode(result.responseText); console.log(jresp.success) “{success:true}” 如果你喜欢这样。 console.log('Success'+jresp.Success)
java脚本总是提供对象。所以不要使用它。您能发布您得到的响应吗?如果是JSON,您应该能够使用JSON.Decode