您的位置:首页 > Web前端 > JavaScript

jsonp解决跨域请求问题

2017-11-29 08:32 519 查看
关键代码

/**
* jsonp解决跨域请求问题。
* JSONP,该协议允许用户传递一个callback参数给服务端,服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,
* 这样客户端就可以随意定制自己的函数来自动处理返回数据了
*/
public String queryStaffInfo() {
list = staffInfoInterfaceService.queryStaffInfo();// 查询人员信息
/*
* object = new JSONPObject("data",
* JSONArray.fromObject(staffInfoInterfaceService
* .queryAllStaffInfoWx()));
*/
JSONArray rows = JSONArray.fromObject(list);// list转换为jsonArray
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("result", rows);// 把rows放入到jsonobject中 key为result
} catch (JSONException e1) {
e1.printStackTrace();
}
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse resp = ServletActionContext.getResponse();
String callback = req.getParameter("callback");
String returnResult = "";// 返回结果
if (callback != null && !"".equals(callback)) {//如果请求地址后面的callback不为空
returnResult = callback + "(" + jsonObject.toString() + ")";//返回结果callback+返回的json数据
} else {
try {
returnResult = jsonObject.getString("result");//返回结果直接返回json
} catch (JSONException e) {
e.printStackTrace();
}
}
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/javascript");
try {
PrintWriter out = resp.getWriter();
out.write(returnResult);//返回数据
} catch (IOException e) {
e.printStackTrace();
}
return null;
}


struts中的配置

<action name="queryStaffInfo" class="staffInfoTxlInterfaceAction" method="queryStaffInfo">
<result name="success" type="json">
<param name="callbackParamter">callback</param>
</result>
</action>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: