jquery 跨域 后台采用struts
来源:互联网 发布:注册淘宝店步骤图 编辑:程序博客网 时间:2024/05/29 10:36
jquery跨域获得json已经困扰3天,一开始一直得不到解决,尝试了多种解决方案最后还是失败了。
一:
前端js如下
$.ajax({
url: "http://127.0.0.1:8080/newTest/restjson_selectListRest.action&format=json&jsonpcallback=?",
type: "get",
dataType: "jsonp",
jsonp: "callback",
success: function(data) {
$.each(json, function(i){
$("#imgContent").append("<li><a href='#'><img src=\'"+json[i].logoimg+"<h2>"+json[i].name+"</h2><p>"+json[i].introduce+"</a></li>");
});
}
});
后台struts采用这样的配置
<action name="restjson_*" class="cg.putuo.action.common.restjsonAction" method="{1}">
</action>
后台action写法如下
public void selectListRest(){
RestaurantService restaurantService = new RestaurantServiceImpl();
String result = null;
String callback = ServletActionContext.getRequest().getAttribute("jsoncallback");
System.out.println("callback"+callback);
System.out.println("输出json格式字符");
result =callback+ "({\"success\": \"dsd\"})";
System.out.println(result);
try {
PrintWriter out = ServletActionContext.getResponse().getWriter();
out.append(result);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样一直获取的数据是null({"success" :"dsd"}),总是获取不到数据,一开始以为jquery写法错了,试了很多jquery写法都不行。
二:后来根据网上有经验的人说这样写
后台采用struts的配置如下,导入struts2-json-plugin-2.3.4.jar包
<package name="common1" extends="json-default">
<action name="restjson_*" class="cg.putuo.action.common.restjsonAction" method="{1}">
<result name="resultok" type="json">
<param name="callbackParameter">jsoncallback</param>
</result>
</action>
</package>
action和上面一样,还是不行。输出null({"success" :"dsd"})。
一直纠结问题出在哪里。
三:通过jquery去掉jsp,用jsp去返回数据,成功了
function returnJSON() {
var inData = {
'jsondata' :"This is parmeter"
};
jQuery.getJSON('http://127.0.0.1:8080/newTest/b1.jsp?jsoncallback=?',
inData, callback);
}
//回调函数,取得从另一个系中返回的JSON数据。
function callback(data) {
alert(data.success);
}
b1.jsp如下
<%@ page language="java" import="java.util.*,net.sf.json.JSONObject" pageEncoding="UTF-8"%>
<%
System.out.println("11111");
//获得前台传入的参数
String jsoncallback = request.getParameter("jsoncallback");
String s2 = request.getParameter("jsondata");
System.out.println(s2);
//将前台传入的JSON字符串转为JSON对象
//JSONObject jso = JSONObject.fromObject(s2);
System.out.println("22222");
/*
*用前台传入的参数调用相应方法取值
*例如取得值为一个字符串
*/
String re = "返回的字符串";
/*返回一个二维数组,
*实际上这里应该去数据库查询返回
*/
List listAll = new ArrayList();
for(int i = 0; i <5; i++){
List listRow = new ArrayList();
for(int j =0; j<5; j++){
listRow.add(i+j+"test");
}
listAll.add(listRow);
}
System.out.println("333");
//将从后台获得的值转换成JSON对象
Map map = new HashMap();
map.put("re", re);
map.put("listAll",listAll);
JSONObject jso1 = JSONObject.fromObject(map);
System.out.print(jsoncallback+"("+jso1+")");
System.out.println("444");
//把转换成JSON对象的值传到前台
response.getWriter().write(jsoncallback+"("+jso1+")");
System.out.println("5555");
%>
这样jquery可以成功获得数据,但是这样的方式不是我需要的,要在jsp里面操作业务,非常不方便。
东折腾西折腾,最后终于找到问题的所在。在一的action里面
把 String callback = ServletActionContext.getRequest().getAttribute("jsoncallback"); 修改为
HttpServletRequest request = ServletActionContext.getRequest();
String callback = request.getParameter("jsoncallback");
输出成功!!!!激动万分,一直都没看到是这样写.getAttribute("jsoncallback");什么时候改掉都没看
一:
前端js如下
$.ajax({
url: "http://127.0.0.1:8080/newTest/restjson_selectListRest.action&format=json&jsonpcallback=?",
type: "get",
dataType: "jsonp",
jsonp: "callback",
success: function(data) {
$.each(json, function(i){
$("#imgContent").append("<li><a href='#'><img src=\'"+json[i].logoimg+"<h2>"+json[i].name+"</h2><p>"+json[i].introduce+"</a></li>");
});
}
});
后台struts采用这样的配置
<action name="restjson_*" class="cg.putuo.action.common.restjsonAction" method="{1}">
</action>
后台action写法如下
public void selectListRest(){
RestaurantService restaurantService = new RestaurantServiceImpl();
String result = null;
String callback = ServletActionContext.getRequest().getAttribute("jsoncallback");
System.out.println("callback"+callback);
System.out.println("输出json格式字符");
result =callback+ "({\"success\": \"dsd\"})";
System.out.println(result);
try {
PrintWriter out = ServletActionContext.getResponse().getWriter();
out.append(result);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样一直获取的数据是null({"success" :"dsd"}),总是获取不到数据,一开始以为jquery写法错了,试了很多jquery写法都不行。
二:后来根据网上有经验的人说这样写
后台采用struts的配置如下,导入struts2-json-plugin-2.3.4.jar包
<package name="common1" extends="json-default">
<action name="restjson_*" class="cg.putuo.action.common.restjsonAction" method="{1}">
<result name="resultok" type="json">
<param name="callbackParameter">jsoncallback</param>
</result>
</action>
</package>
action和上面一样,还是不行。输出null({"success" :"dsd"})。
一直纠结问题出在哪里。
三:通过jquery去掉jsp,用jsp去返回数据,成功了
function returnJSON() {
var inData = {
'jsondata' :"This is parmeter"
};
jQuery.getJSON('http://127.0.0.1:8080/newTest/b1.jsp?jsoncallback=?',
inData, callback);
}
//回调函数,取得从另一个系中返回的JSON数据。
function callback(data) {
alert(data.success);
}
b1.jsp如下
<%@ page language="java" import="java.util.*,net.sf.json.JSONObject" pageEncoding="UTF-8"%>
<%
System.out.println("11111");
//获得前台传入的参数
String jsoncallback = request.getParameter("jsoncallback");
String s2 = request.getParameter("jsondata");
System.out.println(s2);
//将前台传入的JSON字符串转为JSON对象
//JSONObject jso = JSONObject.fromObject(s2);
System.out.println("22222");
/*
*用前台传入的参数调用相应方法取值
*例如取得值为一个字符串
*/
String re = "返回的字符串";
/*返回一个二维数组,
*实际上这里应该去数据库查询返回
*/
List listAll = new ArrayList();
for(int i = 0; i <5; i++){
List listRow = new ArrayList();
for(int j =0; j<5; j++){
listRow.add(i+j+"test");
}
listAll.add(listRow);
}
System.out.println("333");
//将从后台获得的值转换成JSON对象
Map map = new HashMap();
map.put("re", re);
map.put("listAll",listAll);
JSONObject jso1 = JSONObject.fromObject(map);
System.out.print(jsoncallback+"("+jso1+")");
System.out.println("444");
//把转换成JSON对象的值传到前台
response.getWriter().write(jsoncallback+"("+jso1+")");
System.out.println("5555");
%>
这样jquery可以成功获得数据,但是这样的方式不是我需要的,要在jsp里面操作业务,非常不方便。
东折腾西折腾,最后终于找到问题的所在。在一的action里面
把 String callback = ServletActionContext.getRequest().getAttribute("jsoncallback"); 修改为
HttpServletRequest request = ServletActionContext.getRequest();
String callback = request.getParameter("jsoncallback");
输出成功!!!!激动万分,一直都没看到是这样写.getAttribute("jsoncallback");什么时候改掉都没看
0 0
- jquery 跨域 后台采用struts
- JQuery解决jsonp问题,后台采用java
- 采用struts上传文件
- 采用struts上传
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
- WebAPI 后台调用 采用httpclient
- 为什么采用Struts框架呢?
- struts+struts注解+jquery
- Struts后台验证
- Struts后台验证
- struts后台校验
- 写一个Struts后台
- 关于jquery使用ajax传递数组到struts后台的接受问题
- [django]admin后台采用框架页面不行
- 树后台数据存储(采用webmethod)
- spring集成struts(持久化采用JPA)
- struts中采用注解配置Action
- Jackson入门
- 走进AngularJs(四)自定义指令----(中)
- java 中,子类可以重写父类的private方法吗?
- HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
- c++ primer plus(第6版)中文版 第九章编程练习答案
- jquery 跨域 后台采用struts
- Webview让加载进来的页面自适应手机屏幕分辨率居中显示
- 走进AngularJs(五)自定义指令----(下)
- wifi无线信号传输衰减和距离的关系公式[室内定位]
- 走进AngularJs(六) 服务
- 从100PV到1亿级PV网站架构演变
- 右键弹出自定义菜单,很有意思呀!
- 走进AngularJs(七) 过滤器(filter)
- ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock