跨域问题

7 篇文章 0 订阅

跨域是指浏览器无法执行其他网站的脚本。(域名不同、子域名不同、端口不同、协议不同都属于跨域)

 

可通过前台后台两种方式解决跨域。前台:Jsonp(请求目标需可控),后台HttpClient。

一、JSONP

  jsonp:为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递  一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随    意定制自己的函数来自动处理返回数据了。

 json、jsonp详解  

 

实现:

 

//请求目标的后台方法
public string WcfTest(string str)
        {
            if (!string.IsNullOrEmpty(str))
                return "successCallback(1)";
            else
                return "successCallback(0)";
        }

 

 //发出请求的的ajax
 $.ajax({
            url: 'http://localhost:14063/home/JsonpTest',
            type: "get",
            data: {str:"1"},
            dataType: 'jsonp',
            jsonpCallback: "successCallback",//根据返回的方法来定义,否则会出现返回成功不进入success的方法,只会进error方法
            success: function (data) {
                console.log('success');
                console.log(data);
            },
            error: function (err) {
                console.log('err');
                console.log(err);
            }
        });

 

 

 

 

 

 

注意:

1.jsonp方式发出的请求都会变成get请求。

2.设置jsonpCallback否则会出现无法进入success方法的情况,jsonpCallback课根据返回json方法的来自定义。

 

 

二、后台发出请求的方式,使用HttpClient

 

 public async Task<string> Hps()
        {
            string url = "http://localhost:14063/home/JsonpTest";
            HttpClientHandler handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None };

            using (HttpClient httpclient = new HttpClient(handler))
            {
                httpclient.BaseAddress = new Uri(url);
                FormUrlEncodedContent content = new FormUrlEncodedContent(new Dictionary<string, string>()
                                   {
                                      {"username","1111"},
                                      {"pwd","1234"},
                                   }); //参数

                Task<HttpResponseMessage> response = httpclient.PostAsync(url, content);
                string responseString = await response.Result.Content.ReadAsStringAsync();
                return responseString;

            }
        }

 

 

 

 

 

原文地址:http://tnblog.net/cz/article/details/36

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值