用最简单的例子演示如何使用js或者$.ajax进行跨域请求

js跨域请求的原理:先在script里声明一个callbackHandler函数,往header里添加一个script标签,script的src属性值为远端的请求地址,并传入刚才声明的函数名称(如:callbackHandler), 远端服务器收到请求后,返回结果拼装的格式为 callbackHandler({“name”:”zhangsan”}),实际上就是一段javascript代码,调用刚才注册的函数。
下面是一个很简单的例子

//远端的服务器里的代码
 public class HomeController : Controller
    {        
        /// <summary>
        /// 处理请求的action,不管是asp、php、asp.net、jsp....实现类似的功能就行
        /// 本例中访问的完成路径将是  http://xxx.xxx.xxx.xxx:port/home/getdata
        /// </summary>
        /// <param name="callback">客户端传来的js里的function名称</param>
        /// <returns></returns>        
        public string GetData(string callback)
        {
            return callback + "({\"name\": \"sd\"})";
        }
        //这个action只作为显示页面用,在跨域请求中没有用
        public ActionResult Index()
        {
            return View();
        }
    }

下面的发出跨域请求页面的完整代码,里面有详细的注释

//可以直接是一个静态的html页面
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title></title>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <a href="javascript:;" class="js">纯js调用</a>
    <a href="javascript:;" class="ajax">ajax调用</a>
    <script>
        //用于纯js跨域请求的回调函数
        var callbackHandler = function (json) {
            alert('采用纯js跨域请求,返回的结果' + json.name);
        };
        $(function () {
            //纯js跨域请求的处理代码
            $(".js").on('click', function () {
                // 远端服务器的url地址(不管是什么类型的地址,比如:asp、php、asp.net、jsp等,最终生成的返回值都是一段javascript代码)
                var url = "http://localhost:15493/home/getdata?callback=callbackHandler"; //这里的localhost:15493根据实际情况进行修改
                // 创建script标签,设置src属性
                var script = document.createElement('script');
                script.setAttribute('src', url);
                // 把script标签加入head
                document.getElementsByTagName('head')[0].appendChild(script);
                //本例中 服务器返回的结果为 callbackHandler({"name": "sd"});实际上就是调用本js里的callbackHandler函数
                //本方法每执行一次,head就会新添加一次 script,使用$.ajax的方法则不会
            });
            //使用jquery的jsonp进行跨域请求的代码
            $(".ajax").on('click', function () {
                $.ajax({
                    type: "get",
                    async: false,
                    url: "http://localhost:15493/home/getdata",//这里的localhost:15493根据实际情况进行修改
                    data: {},
                    dataType: "jsonp",
                    jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名
                    //jsonpCallback: "getName",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
                    success: function (json) {
                        alert('采用纯jQuery的jsonp进行跨域请求,返回的结果' + json.name);
                    },
                    error: function () {
                        alert('fail');
                    }
                });
            });

        });
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值