我定义了一个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对象.大虾们,帮忙指点一下。

解决方案 »

  1.   

    利用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}"
    }