使用mvc3实现ajax跨域
ajax跨域一般两种方式 1:cors,2:jsonp,
1:cors
jsonp是get形式,承载的信息量有限,所以信息量较大时CORS是不二选择
在请求消息头添头 Access-Control-Allow-Origin , 值可以为指定域名,也可以为*表示允许所有域名跨域仿问
mvc代码
public ActionResult Jump()
{
Response.AddHeader("Access-Control-Allow-Origin","*"); //对请求方域名没有要求
//Response.AddHeader("Access-Control-Allow-Origin","http://www.baidu.com"); 只请允许百度对其进行跨域仿问
return View();
}
客户端使用正常的jquery.ajax就可以调用此方法了。
2:jsonp
mvc3代码
实现类
public class JsonpResult : JsonResult
{
public JsonpResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet;
} public string Callback { get; set; } ///<summary>
///对操作结果进行处理
///</summary>
///<paramname="context"></param>
public override void ExecuteResult(ControllerContext context)
{
var httpContext = context.HttpContext;
var callBack = Callback;
if (string.IsNullOrWhiteSpace(callBack))
callBack = httpContext.Request["callback"]; //获得客户端提交的回调函数名称
// 返回客户端定义的回调函数
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
httpContext.Response.Write(callBack + "(");
httpContext.Response.Write(js.Serialize(Data)); //Data 是服务器返回的数据
httpContext.Response.Write(");"); //将函数输出给客户端,由客户端执行
}
} /// <summary>
/// jsonp扩展方法
/// </summary>
public static class ContollerExtensions
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="controller"></param>
/// <param name="data"></param>
/// <returns></returns>
public static JsonpResult Jsonp<T>(this Controller controller, T data)
{
JsonpResult result = new JsonpResult()
{
Data = data,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
return result;
} /// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="controller"></param>
/// <param name="data"></param>
/// <param name="callback">更改后的回调函数名</param>
/// <returns></returns>
public static JsonpResult Jsonp<T>(this Controller controller, T data,string callback)
{
JsonpResult result = new JsonpResult()
{
Callback=callback,
Data = data,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
return result;
}
}
控制器
/// <summary>
///
/// </summary>
/// <param name="parameters">传入参数</param>
/// <returns></returns>
public ActionResult Jump(string parameters)
{
//以下返回方式都可以,在客户端接收json格式数据
return this.Jsonp("");
return this.Jsonp(new { success = true, message = "" });
return this.Jsonp<类名>(类对象);
return this.Jsonp(类对象);
} /// <summary>
///
/// </summary>
/// <param name="parameters"></param>
/// <param name="updatecallback">更改后的回调函数名</param>
/// <returns></returns>
public ActionResult Jump(string parameters, string updatecallback)
{
//以下返回方式都可以,在客户端接收json格式数据
return this.Jsonp("", updatecallback);
return this.Jsonp(new { success = true, message = "" }, updatecallback);
return this.Jsonp<类名>(类对象, updatecallback);
return this.Jsonp(类对象, updatecallback);
}
客户端ajax
$.ajax({
type: "GET",
url: 请求地址,
data:请求数据,
dataType: "jsonp", //必须注明数据格式是jsonp
success: function (result) {
alert(result.message);
}
});
$.ajax({
type: "GET",
url: 请求地址,
data:请求数据,
dataType: "jsonp", //必须注明数据格式是jsonp
jsonp: "updatecallback", //修改回调函数名称
success: function (result) {
alert(result.message);
}
}
end
使用mvc3实现ajax跨域的更多相关文章
- Laravel中的ajax跨域请求
最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...
- Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)
由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...
- Ajax跨域问题的两种解决方法
浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决. 1.在请求页面上使用Access-Control-Allow-Origin标头. 使用如下标头可以接受全部网站请求: ...
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...
- 解决ajax跨域请求 (总结)
ajax跨域请求,目前已用几种方法实现: 1)用原生js的xhr对象实现. var url="http://freegeoip.net/json/" ...
- Ajax跨域访问wcf服务中所遇到的问题总结。
工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...
- JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- Ajax跨域:Jsonp原理解析
推荐先看下这篇文章:JS跨域(ajax跨域.iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重 ...
- jquery ajax跨域调用
客户端: //ajax跨域调用的方法 $.ajax({ url:dustUrl+"/screenshot/getDevices.do", type: "get" ...
随机推荐
- C#代理那点事儿
Func代理是啥? Func代理接收0个或多个参数,返回TResult值: 以Func<TSource, TResult>为例:Func带来封装一个方法,该方法接收一个参数,然会一个TRe ...
- Openvswitch原理与代码分析(6):用户态流表flow table的操作
当内核无法查找到流表项的时候,则会通过upcall来调用用户态ovs-vswtichd中的flow table. 会调用ofproto-dpif-upcall.c中的udpif_upcall_hand ...
- (原)win8下编译GLUT
1.到opengl官网下载glut源代码 2.修改glutwin32.mak下 # MSVC install directoriesLIBINSTALL = XXXXX\VC\lib //vs ...
- js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange
(1) 先说jquery, 使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码: $('#username').bin ...
- UML2
UML中有3种构造块:事物.关系和图,事物是对模型中最具有代表性的成分的抽象:关系是把事物结合在一起:图聚集了相关的的事物.具体关系图标如下 说明:构件事物是名词,是模型的静态部分.行为事物是动态部分 ...
- 使用SQL联合查询来构建临时vo对象的应用
联合查询: 表1: team球队表 表2:schedule 赛程表 需要数据: 球队名称.主队ID.主队名称.客队ID.客队名称.胜负情况 方法1. Object数组取出列和数值 import jav ...
- 64bit ubuntu 安装32bit的软件
在64bit的系统上安装32bit的软件时,会提示: file not found or no such file. 此时只需要安装 sudo apt-get install libc6-dev-i3 ...
- easyui 键盘控制tree 上下
$.extend($.fn.tree.methods, { highlight: function(jq, target){ return jq.each(function(){ $(this).fi ...
- Qt 判断文件是否存在
包含头文件:<QFileInfo> 代码: QFileInfo file("文件路径"); if(file.exists()==false){文件不存在:}
- jquery---基本标签
你觉得 jquery 有哪些好处? jQuery 是轻量级的 javascript 框架 强大的选择器 出色的 DOM 操作的封装 可靠的事件处理机制 完善的 ajax 封装 出色的浏览器的兼容性 支 ...