jsonp解决跨域请求问题

关键代码

/**
     * 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>

猜你喜欢

转载自blog.csdn.net/ilovecontroller/article/details/78661115