用eval 转json格式字符串为js对象的问题 ... ... 在线等~~~ ~~~
js页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsonTest</title>
<script type="text/javascript" src="<%=request.getContextPath()+"/js_file/prototype.js" %>"></script>
<script type="text/javascript" src="<%=request.getContextPath()+"/js_file/json.js" %>"></script>
<script type="text/javascript" src="<%=request.getContextPath()+"/js_file/ajax.js" %>"></script>
<script language="JavaScript" type="text/javascript">
function sendRequest()
{
var url = 'testJSON.action';
var myAjax = new Ajax.Request(
url,
{
//请求方式:POST
method:'post',
//请求参数
parameters:null,
//指定回调函数
onComplete: processResponse,
//是否异步发送请求
asynchronous:true
});
function processResponse(request)
{
if(request.readyState == 4){
if(request.status == 200){
var info = request.responseText;
alert(info);
// var info2 = info.evalJSON;//将返回的JSON字符串转成JavaScript对象
var info2 = eval('('+info+')');
alert(info2);
$("div1").innerHTML = info2.param1;
$("div2").innerHTML = info2.param2;
$("div3").innerHTML = info2.param3;
}
else if(request.status == 404){
alert("404 未找到!");
}
else {
alert("出错了!");
}
}
}
}
</script>
</head>
<body>
<div style="font-size:16px; text-align: center;">
<a href="javascript:sendRequest();">测试JSON</a><br>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
</div>
</body>
</html>
后台处理:
package com.test.action;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.json.JSONObject;
public class JSONAction extends ActionSupport {
@Override
public String execute() throws Exception {
String rt = "";
HttpServletResponse response = ServletActionContext.getResponse();
JSONObject resultJSON = new JSONObject();
resultJSON.put("param1", 1);
resultJSON.put("param2", 2);
resultJSON.put("param3", 3);
try{
response.getWriter().print(resultJSON);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(resultJSON.toString());
rt = "test";
return rt;
}
}
可以返回json格式的数据 resultJSON.toString() 在后台可以打印出 {"param1":1,"param2":2,"param3":3}
alert(info);弹出的内容为 {"param1":1,"param2":2,"param3":3}{}
但在后面的处理就不行了,用var info2 = info.evalJSON; 取出的三个value都是undefined
如果用var info2 = eval('('+info+')'); 则到此没有反应了
刚学json被折腾了二天了,望指点迷津...在线等~~~~~~ 多谢~~~
[解决办法]
var json=req.responseText.evalJSON(true); //用evalJSON()方法把服务端传过来的字符串转化成JSON数据对象。
如果不行的话,很可能是prototype.js与json.js两个包中的方法冲突了
其实prototype.js 1.51的版本中,已经有了toJSON()和evalJSON()这两个方法,json.js包中也有这两个方法,你把
json.js包去掉,光用prototype实现试试,应该就可以了
[解决办法]
[解决办法]
如果要返回两个对象必须用数组
[{"param1":1,"param2":2,"param3":3},{}]
[解决办法]
这样的用法没有用过,我一般是用Ext的encode和decode来转换json数组和对象
[解决办法]
[解决办法]
return rt
改为return null
在ajax里加个 dataType: 'json'
[解决办法]
{"name":"value"}
推荐格式是:属性和值都加引号
[解决办法]
[code=Java][/code]System.out.println("落剑缤纷!");
[解决办法]
1,response.getWriter().print(resultJSON);
//把这句改成resultJSON.toString()试试
2,把eval('('+info+')'); 改为eval(info);
[解决办法]
把断点定位在 response.getWriter().print(resultJSON); 这个地方,看看resultJSON的值是什么?。。如果在这个地方是 {"param1":1,"param2":2,"param3":3} ,那就证明是在传输到前台之后值被改变了, 问题就出在前台了。 如果在后台输出的时候的值已经是 {"param1":1,"param2":2,"param3":3},{} , 那你就要想办法处理后台的数据了。看看JsonObject是怎么转化对象到json字符串的。 然后你前台eval的时候, 提示什么错误呢?。如果你用IE的话,你可以把IE的javascript调试器打开。。或者 firefox 的 firebug 调试一下。问题就能出来了。希望对你有用。
[解决办法]
json数据中有/r/n换行的时候eval(info)这种写法会出错。
[解决办法]
jquery的看过点,pretotype的没有接触过,帮顶
[解决办法]
发表于:2009-04-03 18:35:40
[解决办法]
本来准备回复的,看了一下发帖时间
奔溃了,
问题应该是语法错误
[解决办法]
你后台处理的页面输出的是不是还有别的数据哦,除了JSON字段的其他的输出都evalJSON不了.
[解决办法]
晕 浪费了 都是一年前的了 11