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跨域的更多相关文章

  1. Laravel中的ajax跨域请求

    最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...

  2. Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)

    由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...

  3. Ajax跨域问题的两种解决方法

    浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决. 1.在请求页面上使用Access-Control-Allow-Origin标头. 使用如下标头可以接受全部网站请求: ...

  4. 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。

    ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...

  5. 解决ajax跨域请求 (总结)

    ajax跨域请求,目前已用几种方法实现:   1)用原生js的xhr对象实现.                var url="http://freegeoip.net/json/" ...

  6. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  7. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  8. Ajax跨域:Jsonp原理解析

    推荐先看下这篇文章:JS跨域(ajax跨域.iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重 ...

  9. jquery ajax跨域调用

    客户端: //ajax跨域调用的方法 $.ajax({ url:dustUrl+"/screenshot/getDevices.do", type: "get" ...

随机推荐

  1. Navi.Soft30.产品.代码生成器.操作手册

    1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码都是相同的,只需修改10%的代码量.此时 ...

  2. Swing How to make dialogues

    There are two types of dialog: modal non-modal: must use JDialog directly Taken JFileChooser as Exam ...

  3. GitHub上排名前100的iOS开源库介绍(来自github)

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介,方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 若有任何疑问可通过微博@李锦发联系我 项目名称 项目信息 ...

  4. ios辅助功能之voiceover实战

      一个元素朗读的内容可分为以下4个部分(4部分按先后顺序朗读) 1. Label:元素的标题 2. Value:元素的值(可选) 3. Traits:元素的特征,即类型,包含: 按钮/链接/搜索框/ ...

  5. winform C#获得Mac地址,IP地址,子网掩码,默认网关

    1.添加程序集 2.引入命名空间 using System.Management; 3.方法 ManagementClass mc = new ManagementClass("Win32_ ...

  6. IIS 日志文件分析

    先安装下文参考资料中的log parser studio 然后就可以针对日志文件进行sql语句的查询了. 各页面访问量排行 ) FROM '[LOGFILEPATH]' where cs-uri-st ...

  7. 康力优蓝机器人 -- 优友U05类人型机器人发布

    [寒武计划]优友U05类人型机器人发布: http://digi.tech.qq.com/a/20151124/043234.htm?pgv_ref=aio2015&ptlang=2052 北 ...

  8. Windows CMD命令大全(转)

    Windows CMD命令大全   命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行 ...

  9. 再谈LRU双链表内存管理

    N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...

  10. java.lang.NullPointerException

    你妹的这是什么错误啊? Errors occurred during the build. Errors running builder 'Android Resource Manager' on p ...