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

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...