使用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" ...
随机推荐
- Fixed error when submitting assignments in Machine Learning on Coursera
Environment: OS: OSX 10.8.5 Matlab: R2013a(8.1.0.604) 64bit How to fix: In file submit.m, line 129 ...
- Erwin 生成 mysql 带注释(comment )的脚本
Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment. 在百度无数次无法解决下,又FQ谷歌,在一个日 ...
- Myeclipse 2015 stable 1.0 完美破解方法(转自 http://yangl.net/2015/07/14/myeclipse_2015stable_1/)
Myeclipse 2015 stable 1.0 完美破解方法 http://yangl.net/2015/07/14/myeclipse_2015stable_1/ 破解包(注册机)下载地址:链接 ...
- [转载]JavaScript 中小数和大整数的精度丢失
标题: JavaScript 中小数和大整数的精度丢失作者: Demon链接: http://demon.tw/copy-paste/javascript-precision.html版权: 本博客的 ...
- swift 属性
属性将值和类,结构,枚举相关联.属性分为计算属性和存储属性.存储属性存储常量或变量作为实例的一部分 ,计算属性计算一个值.存储属性用于类和结构体,计算属性用于类,结构体和枚举. 1:存储属性 存储属性 ...
- Shooting Algorithm
Shooting算法是Wenjiang提出的一种优化Lasso(L1 Regularization)和Bridge Regression的算法, 本文以Lasso为例. 对于线性回归问题$\mathb ...
- Unix sed实用教程系列目录[已完成]
本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有讲明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感 ...
- Ubuntu桌面版本和服务器版本之间的区别(转载)
转载自:http://blog.csdn.net/fangaoxin/article/details/6335992 http://www.linuxidc.com/Linux/2010-11/297 ...
- c# dataGridview的Cellclick移除事件
private void gvMoldInfo_CellClick(object sender, DataGridViewCellEventArgs e) { ) return; string col ...
- win7左ctrl和左alt键互换
主要参考这篇文章: http://xyztony1985.blog.163.com/blog/static/3611782011752420104/ 感谢原博主 Windows Registry Ed ...