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

jsonp实现跨域示例

2016-10-12 17:00 211 查看
通过jsonp实现跨域,需要请求端带上jsoncallback=jQuery110206280181081965566_1476262321380,这相当于把钥匙,返回端带着这把钥匙返回数据jQuery110206280181081965566_1476262321380(json串),所以需要请求端跟服务端都做修改。

请求示例:

Request URL:
http://172.16.103.126:8034/Monitor/StartMonitorMachine?jsoncallback=jQuery110206280181081965566_1476262321380&configId=31&itemId=157&startTime=2016-10-12+16%3A59%3A46&lastTime=1&ReCallUrl=http%3A%2F%2F172.16.13.10%3A8008&ip=172.16.103.126&_=1476262321387
返回示例:
jQuery110206280181081965566_1476262321380({"StateCode":"0","Message":"成功","Data":"0"})

示例代码如下:修改地方已加粗
请求端(js)
$.ajax({

            type: "GET",
            dataType : 'jsonp',  

            jsonp:"jsoncallback",
 //jsoncallback可任意取,服务端接收时一致就行,如果不一致会报jsoncallback不识别,不是jsoncallback开头的也会报不识别的错

            url: 'http://'+element.vm.ip+':8034/Monitor/StartMonitorMachine',

            beforeSend: function (xhr) {

                xhr.setRequestHeader("Access-Control-Allow-Origin","*");

            },

            data: {

                "configId": stdetailsvm.monitorConfigList[i].id,

                "itemId": itemId,

                //"startTime": new Date().toLocaleString(),

                "startTime": stdetailsvm.currentTime(),

                "lastTime": stdetailsvm.monitorLast,

                //"ReCallUrl": window.location.host

                "ReCallUrl": "http://172.16.13.10:8008",

                "ip":element.vm.ip

            },

            success: function (data) {

                if (data.Data == "0") {

               
alert("向服务器发送启动监控指令成功。");

                } else {

                    alert("向服务器发送监控指令失败。"+data.Message);

                }

            },

            error: function (XMLHttpRequest, textStatus, errorThrown) {

                alert("请求数据异常,状态码:" + XMLHttpRequest.status+",Error:"+errorThrown+",textStatus:"+textStatus);

            }

        });

服务端Net MVC
    public class MachineMonitorConfigPack : PostPackBase

    {

        public string jsoncallback
{ get; set; }
       

        public int configId { get; set; }

        public int itemId { get; set; }

        public string startTime { get; set; }

        public int lastTime { get; set; }

        public string ReCallUrl { set; get; }

    }

public string StartMonitorMachine(MachineMonitorConfigPack info)

        {

            var resp = new APIResponse<string>()

            {

                StateCode = StateCode.Success,

                Message = "启动监控成功"

            };

            try

            {

                ImpersonateUser user = new ImpersonateUser();

                ImpersonateUserExt.ImpersonateAdminUser(user);

                //DateTime startTime = DateTime.Parse(info.startTime);

                DateTime startTime = DateTime.Now;

                DateTime endTime = startTime.AddMinutes(info.lastTime);

                MachineMonitor.SetStartTime(startTime);

                MachineMonitor.SetDeadTime(endTime);

                MachineMonitor.SetRecalUrl(info.ReCallUrl);

                MachineMonitor.SetConfigId(info.configId);

                MachineMonitor.SetItemId(info.itemId);

                MachineMonitor.StartMonitor();

                Logger.Info("Post Start Monitor Machine success.");

                Logger.Info("startTime:"+ startTime);

                Logger.Info("endTime:"+ endTime);

                Logger.Info("RecalUrl:"+ info.ReCallUrl);

                Logger.Info("ConfigId:"+ info.configId);

                Logger.Info("ItemId:" + info.itemId);

                resp.Data = "0";

            }

            catch (Exception ex)

            {

                resp.StateCode = StateCode.Fail;

                resp.Message += ex.ToString();

                resp.Data = "1";

                Logger.Info("Start Monitor Machine Exception:" + ex);

            }

            Logger.Info("请求StateCode:"+resp.StateCode+ ",Message:"+resp.Message);

            return
info.jsoncallback + "(" + new JavaScriptSerializer().Serialize(resp) + ")";


        }

服务端 java spring mvc
public class MachineMonitorConfigPack {
private String jsoncallback;

。。。
}

@RequestMapping(value = { "/StartMonitorMachine" }, method = { RequestMethod.GET }, produces = "application/json;charset=UTF-8")
@ResponseBody
public String StartMonitorMachine(MachineMonitorConfigPack config) {

try {
logger.info("请求StartMonitorMachine:configId="
+ config.getConfigId() + "&itemId=" + config.getItemId()
+ "&startTime=" + config.getStartTime() + "&lastTime="
+ config.getLastTime() + "&ReCallUrl="
+ config.getReCallUrl() + "&ip=" + config.getIp());
MonitorService.setConfigId(config.getConfigId());
MonitorService.setItemId(config.getItemId());
MonitorService.setRecallUrl(config.getReCallUrl());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = sdf.parse(config.getStartTime());

Date deadDate = new Date(startDate.getTime() + config.getLastTime()
* 60 * 1000);

MonitorService.setStartTime(startDate);
MonitorService.setDeadTime(deadDate);
MonitorService.setIp(config.getIp());

MonitorService.getInstance().StartMonitor();

logger.info("请求启动监控信息成功");

ret.put("StateCode", "0");
ret.put("Message", "成功");
ret.put("Data", "0");

} catch (Exception e) {
// TODO Auto-generated catch block
logger.info("请求StartMonitorMachine Exception:"+e);

ret.put("StateCode", "1");
ret.put("Message", e.toString());
ret.put("date", "1");
}
return config.getJsoncallback()+"("+ret.toString()+")";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: