jsp如何输出json及客户端如何解析它?

阿凡达哥 2012-10-01 07:42:10
我定义了一个JSP页面:

/json/resources/simpleresponse.jsp


<%@ page language="java"
contentType="application/json; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page isELIgnored = "false" %>
<%@ page import = "com.dongantech.eshop.services.responses.*" %>
<%
Response lastResponse =(Response) request.getAttribute("lastResponse");
%>
{
"type":"${lastResponse.type}",
"messageKey":"${lastResponse.message.key}",
"messageText":"${lastResponse.message.text}"
}


使用Chrome浏览器访问

http://localhost:8080/donganshop/product/adder?request=add&code=1001144001&name=WD500G&manufacturer=WD

浏览器显示信息:


{
"type":"successful",
"messageKey":"successful",
"messageText":"成功新增商品(1001144001,WD500G)!"
}


查看其显示页面源代码,与其显示内容完全一样,没有任何多余内容。

然而使用IE8浏览器访问

http://localhost:8080/donganshop/product/adder?request=add&code=1001144001&name=WD500G&manufacturer=WD

会提示下载文件adder, 我查看里面的源代码,源代码和显示信息


{
"type":"successful",
"messageKey":"successful",
"messageText":"成功新增商品(1001144001,WD500G)!"
}

完全一样,也没有任何多余内容。

接着,我使用JsTestDriver来测试js代码(下面的js代码使用了jQuery库)


//File TestProductAddTestCase.js
ProductAdderTest = TestCase("ProductAdderTestCase");
ProductAdderTest.prototype.testAddSuccessfully = function(){
var adder = new ProductAdder();
var p = new Product();
p.setName("WD500G");
p.setCode("1001144001");
var adder = new ProductAdder();
adder.add(p);
//to be continued
};


//File ProductAdder.js
var ProductAdder = (function(){
//private static members
var ADDER_URL = "/product/adder";
//constructor
var ctor = function(){
this.add = function(theProd){
var url = CommonContants.rootUrl + ADDER_URL ;
$.ajax({
url:"http://localhost:8080/donganshop/product/adder",
dataType:"json",
data:{
request:"add",
name:theProd.getName(),
code:theProd.getCode()
},
complete:function(data){
var msg = $.parseJSON(data);
alert(msg);
}
});
};
};
return ctor;
})();


浏览器弹出的对话框,显示“null”。

就算把语句alert(msg);改为alert(data);后,一样显示的不是预期的内容。

我想要预期的内容应该json内容


{
"type":"successful",
"messageKey":"successful",
"messageText":"成功新增商品(1001144001,WD500G)!"
}


或者由这些内容解析成的js对象.

大虾们,帮忙指点一下。
...全文
1796 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hj86073026 2012-10-08
  • 打赏
  • 举报
回复
楼主真用功,放假还这么努力。。
阿凡达哥 2012-10-08
  • 打赏
  • 举报
回复
利用Chrome的调试工具,找到了原因。

XMLHttpRequest cannot load http://localhost:8080/donganshop/product/adder. Origin http://127.0.0.1:42442 is not allowed by Access-Control-Allow-Origin.

设置一个response的Header属性就可以了。

一个访问控制规则,要设置成准许接收所有的外部站点回应信息,不然默认所接受的站点只有127.0.0.1


<%@ page language="java"
contentType="application/json; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page isELIgnored = "false" %>
<%@ page import = "com.dongantech.eshop.services.responses.*" %>
<%
Response lastResponse =(Response) request.getAttribute("lastResponse");
response.setHeader("Access-Control-Allow-Origin","*");
%>
{
"type":"${lastResponse.type}",
"messageKey":"${lastResponse.message.key}",
"messageText":"${lastResponse.message.text}"
}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧