读书人

用eval 转json格式字符串为js对象的有

发布时间: 2012-08-09 15:59:21 作者: rapoo

用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}这句话里面的param1,param2,param3不应该加双引号吧,他应该是按照对象的属性的方式传递的吧,你可以去掉双引号试试

[解决办法]
如果要返回两个对象必须用数组
[{"param1":1,"param2":2,"param3":3},{}]
[解决办法]
这样的用法没有用过,我一般是用Ext的encode和decode来转换json数组和对象
[解决办法]
探讨
引用:
如果要返回两个对象必须用数组
[{"param1":1,"param2":2,"param3":3},{}]


但这个{}空对象是怎么生成的?怎样去掉它呢? 再不行的话,怎将它放进数组里面去?到页面取时无视它算了

[解决办法]
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

读书人网 >Ajax

热点推荐