日期:2014-05-17  浏览次数:20696 次

有关JSON的一个问题,困扰了很久,望高手解决
原意想法是这样:
客户端用JS生成JSON数据,通过Ajax框架prototype发放到服务端;服务端接收JSON数据后利用JSON in Java重新组织成JSON对象,再生成JSON字符串回调Ajax客户端函数;在被回调的函数中显示数据。
客户端代码如下:
sendData.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<html>
<head>
<script src="json.js"></script>
<script src="prototype.js"></script>
<title>使用JSON示例</title>
</head>
<body>
<script language="javascript">
function sendData(){
usersVar={ "userName": "jj", "address":{"province":"123","city":"cs"}, "email": "xiangxiangd126.com" };
var url="dealData.jsp?timeStamp="+new Date().getTime();
var myAjax=new Ajax.Request(url,{
method:'post',
parameters:usersVar,
requestHeaders:{Accept:'application/json'},
contentType: 'application/x-www-form-urlencoded',
onComplete:showResponse,
asynchronous:true
});
}
sendData();
function showResponse(originalRequest){

var user=originalRequest.responseText.evalJSON();
document.write("JSON是:");
document.write(user.email);

}

</script>
</body>
</html>

服务端代码如下:
dealData.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ page import="org.json.*,java.util.HashMap" %>
<html>
<head>
<script src="json.js"></script>
<script src="prototype.js"></script>
<title>使用JSON示例</title>
</head>
<body>
<%
String userName=request.getParameter("userName");
String address=request.getParameter("address");
String email=request.getParameter("email");
HashMap<String,String> map=new HashMap<String,String>();
map.put("userName",userName);
map.put("address",address);
map.put("email",email);
JSONObject userJsonObj=new JSONObject(map);
out.print(userJsonObj.toString()); 
%>
</body>
</html>
结果发给用浏览器访问客户端页面时,页面无任何显示,也无任何报错。请问是什么问题?


------解决方案--------------------
不会prototype,用过jquery。
不知道你requestHeaders:{Accept:'application/json'},之后,是不是usersVar就是JSON了,你可以试试在var myAjax=new Ajax.Request(url,{
这句之前加入
usersVar = eval("(" + usersVar + ")");
试试
------解决方案--------------------
usersVar={ "userName": "jj", "address":{"province":"123","city":"cs"}, "email": "xiangxiangd126.com" };

address 应该无法识别,可能会识别为unknown 或者 null或者[object],请用httpwatch或者wireshark观察发送的数据
------解决方案--------------------
明白你的意思了:直接输出originalRequest.responseText是个JSON字符串,但evaljson后,用对象方式无法访问,是这意思吧?

不会prototype,所以不知道evaljson怎么用,既然originalRequest.responseText已经是个字符串了,要不你eval("(" + originalRequest.responseText + ")"),然后用对象方式看能输出email吗,要能,那就是prototype没调好吧。确实觉得你这问题挺怪的
------解决方案--------------------
document.write 还象打印不出来吧?
 用alert看看user有值没