原意想法是这样:
客户端用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>
结果发给用浏览器访问客户端页面时,页面无任何显示,也无任何报错。请问是什么问题?

解决方案 »

  1.   

    不会prototype,用过jquery。
    不知道你requestHeaders:{Accept:'application/json'},之后,是不是usersVar就是JSON了,你可以试试在var myAjax=new Ajax.Request(url,{
    这句之前加入
    usersVar = eval("(" + usersVar + ")");
    试试
      

  2.   

    out.print(userJsonObj.toString());  换成Response.Write(userJsonObj.toString());  试试
      

  3.   

    wula0010,您给的是ASP的写法吧。lcrystal623,usersVar是发送的变量,var myAjax=new Ajax.Request这句中的var myAjax=完全可以去除。
    是这样,经反复测试,如果不用.evalJSON()方法,输出时是可以输出JSON字符串的,但使用user.email显示undefined。如果使用.evalJSON()方法则根本无法正常显示。继续困扰中啊... ...
      

  4.   

     == 、、使用firefox 的 firebug自己调试吧。。
      

  5.   

    usersVar={ "userName": "jj", "address":{"province":"123","city":"cs"}, "email": "xiangxiangd126.com" };address 应该无法识别,可能会识别为unknown 或者 null或者[object],请用httpwatch或者wireshark观察发送的数据
      

  6.   

    发送到服务端是可以正确接收的,返回时文本也可以正常接收,关键是返回后转换成JSON无法用点分表示法得到值。
      

  7.   

    明白你的意思了:直接输出originalRequest.responseText是个JSON字符串,但evaljson后,用对象方式无法访问,是这意思吧?不会prototype,所以不知道evaljson怎么用,既然originalRequest.responseText已经是个字符串了,要不你eval("(" + originalRequest.responseText + ")"),然后用对象方式看能输出email吗,要能,那就是prototype没调好吧。确实觉得你这问题挺怪的
      

  8.   

    您给的语句已经试过了,仍然不行。注:prototype用的是1.7版本的。
      

  9.   

    document.write 还象打印不出来吧?
     用alert看看user有值没
      

  10.   

    终于解决了,谢谢各位兄弟姐妹。还是服务端返回数据的问题。把服务端JSP页面所有的HTML代码去掉就可以了。tks。
      

  11.   

    你好,樓主,希望你用下原始的js試試并告知結果?謝謝。
    function showResponse(originalRequest){
    var user=eval('(' + originalRequest.d + ')');
    document.write("JSON是:");
    document.write(user.email);
    }
      

  12.   

    happenhe,原始的js不行。估计应该是prototype.js中做了许多的处理。