jsonp实现跨域示例

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


请求示例:

  1. 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()+")";
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值