bigCateList=new CateDao().getCateList(0);
request.setAttribute("bigCateList", bigCateList);
%>
<form action="xxx" method="post">
大分类:
<select id="bigCate" name="bigCate" >
<c:forEach var="cateInfo" items="${ bigCateList}" >
<option value="${cateInfo.id }">${cateInfo.cateName }</option>
</c:forEach>
</select>
小分类:
<select id="smallCate" name="smallCate" >
</select>
打酱油的:
<input type="text" />
</form>
</body>
//服务端
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//根据传上来的parentID 查询子分类
int parentId = Integer.parseInt(request.getParameter("parentId"));
List<CateInfo> cateList=new CateDao().getCateList(parentId);
JSONArray JSONObj=JSONArray.fromObject(cateList);
response.setContentType("text/html;charset=utf-8" );
response.getWriter().print(JSONObj);
}
四、关于返回数据类型 为 JSONp 的情况
因为同源策略,Ajax 的请求是不许跨域访问的,如果试图访问其他服务器上的url 会出现如下错误
1.已阻止交叉源请求:同源策略不允许读取 http://10.10.10.15:8080/JSONPDemo/TestServlet 上的远程资源。
解决方法:可以将资源移动到相同的域名上或者启用 CORS 来解决这个问题。
2.已阻止跨源请求:同源策略禁止读取位于 http://169.254.246.250:8080/web1/WebAServlet 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
同源策略是指阻止代码获得或者更改从另一个域名下获得的文件或者信息。也就是说我们的请求地址必须和当前网站的地址相同。同源策略通过隔离来实现对资源的保护。这个策略的历史非常悠久从Netscape Navigator 2.0时代就开始了。
解决方法:解决这个限制的一个相对简单的办法就是在服务器端发送请求,服务器充当一个到达第三方资源的代理中继。虽然是用广泛但是这个方法却不够灵活。
另一个办法就是使用框架(frames),将第三方站点的资源包含进来,但是包含进来的资源同样要受到同源策略的限制。有一个很巧妙的办法就是在页面中使用动态代码元素,代码的源指向服务地址并在自己的代码中加载数据。当这些代码加载执行的时候,同源策略就不会起到限制。但是如果代码试图下载文件的时候执行还是会失败,幸运的是,我们可以使用JSON(java script Object Notation)来改进这个应用。
//JSONp的使用
<script type="text/java script">
$(function(){
$("button").click(function(){
$.ajax({
url:"http://169.254.246.250:8080/web1/WebAServlet",
dataType:"JSONp", //这里使用 JSONp这个格式
JSONp:"JSONpcallback", //这个名字是给别人用的
success:function(data){
$("#div1").append(data.id+"<br />");
$("#div1").append(data.userName+"<br />");
$("#div1").append(data.password+"<br />");
$("#div1").append(data.note+"<br />");
}
});
});
});
</script>
//被访问者的服务端
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String JSONp=request.getParameter("JSONpcallback");
String JSONStr= "{\"id\":99,\"userName\":\"张三\",\"password\":\"admin\",\"note\":\"备注\",\"aihao\":\"球类\"}" ;
response.setContentType("text/html;charset=utf-8");
response.getWriter().print( JSONp+"("+ JSONStr +")" );
}