使用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" ...
 
随机推荐
- Android 6.0 源代码编译实践
			
http://www.judymax.com/archives/1087 Android 6.0 源代码编译实践 https://mirrors.tuna.tsinghua.edu.cn/help/A ...
 - 更换TFS账户
			
1.通过命令行启动“rundll32.exe keymgr.dll, KRShowKeyMgr"2.更改TFS账户3.重新启动VS2005
 - struts2:遍历自定义字符串数组,遍历Action实例所引用对象中的数组
			
在struts2:OGNL表达式,遍历List.Map集合:投影的使用一文中已经讲述了OGNL遍历List.Map集合等功能. 本文简单写一个遍历数组的示范程序. 1. 遍历自定义字符串数组 < ...
 - Java与邮件系统交互之使用Socket验证邮箱是否存在
			
最近遇到一个需求:需要验证用户填写的邮箱地址是否真实存在,是否可达.和普通的正则表达式不同,他要求尝试链接目标邮箱服务器并请求校验目标邮箱是否存在. 先来了解 DNS之MX记录 对于DNS不了解的,请 ...
 - WinForm 批量设置指定控件中的控件状态
			
在开发中常遇到当点击某个按钮的时候,禁用文本框或按钮的的状态,以防止误操作,下面的代码是我已批量设置指定控件中的按钮状态的代码,同理可以延伸出很多操作. /// <summary> /// ...
 - C、C++编译,链接,extern链接
			
//b.cpp #inlcude <iostream> void b() { std::cout<<"fun b"; } //a.cpp extern vo ...
 - LevelDB(v1.3) 源码阅读之 Slice
			
LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...
 - web通过ActiveX打印
			
最近做了一个activex控件,可以通过html页面动态设置报表文件的数据,控件里的报表是通过FastReport实现了,可以通过FastReport先把报表设置好.欢迎大家提意见 控件及Demo下载
 - 详解shape标签
			
转载自:http://blog.csdn.net/harvic880925/article/details/41850723 一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标 ...
 - SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework
			
6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...