zoukankan      html  css  js  c++  java
  • 防止跨域(jsonp详解)

    详见:http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html

    $("#getJsonpByJquery").click(function () {
        $.ajax({
            url: 'http://localhost:2701/home/somejsonp',
            dataType: "jsonp",  //jsonp格式
            jsonp: "callback", //jsonp的回调函数
      jsonpCallback:"jsonCallBack", //指定回调函数 需要在后台中做下处理 success: function (data) { console.log(data) } }) })


    完整Demo两种方法:js

    
    

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>jsonpAjaxCall.html</title>
    <script type="text/javascript" src="/javascript/jquery.js"></script>
    <script type="text/javascript">
      function jsonCallBack(d){ alert("123"); }
      function HuiDiaoMethod(d){console.log(d); }
      $(function(){
        //第一种方法:更原生些,但毕竟麻烦,需要向Dom树中添加script节点 需要回调函数
        $("#send").on('click', function(event) {
          //</script> 注意这里有一个转义字符 /
          $("<script></script>").attr("src","http://10.1.56.153:6631/ajaxcall.ashx?callback=HuiDiaoMethod").appendTo('body');
        });

    
    

        //推荐第二种方法:简单(无需添加script节点 无需要回调函数)
        $("#ajax").on("click",function(){
          $.ajax({

            "url":"http://10.1.56.153:6631/ajaxcall.ashx",

            "dataType":"jsonp",
            jsonp: "callback", //回调函数在QueryString中的键值,默认是callback。后台Request["callback"] 获取回调函数名称
            jsonpCallback:"jsonCallBack", //指定回调函数 需要在后台中做下处理
            success: function (data) { //data是json对象 后台最终输出的是 jsonCallBack(data)
                            console.log(data)
                         }
             });
         });
      });
    </script>
    </head>
    <body>
    <button id="send">getJsonp</button>
    <button id="ajax">AjaxgetJsonp</button>
    </body>
    </html>

     

     备注:

    后台返回的数据格式必须是:

    MethodName(参数);

    参数可以是json格式 也可以不是json格式。 但一定要是上面的格式 否则js会报错。

    补充:

    Access-Control-Allow-Origin

    只有当目标页面的response中,包含了 Access-Control-Allow-Origin 这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。

    protected override void Application_BeginRequest(object sender, EventArgs e)
    {             
                    //HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
                    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
                    HttpRequest request = HttpContext.Current.Request;
                    string orig = request.Headers.Get("Origin");
                    if (!string.IsNullOrEmpty(orig)&& request.UrlReferrer!=null&&!string.IsNullOrEmpty(request.UrlReferrer.Host))
                    {
                        var host = request.UrlReferrer.Host;
                        orig = request.UrlReferrer.Scheme+"://"+ host;
                        if (request.UrlReferrer.Port != 80 && request.UrlReferrer.Port != 443)
                        {
                            orig += ":" + request.UrlReferrer.Port;
                        }
                        //不是 CookieDomain指定的域名下的请求全部拒绝。
                        if (!host.EndsWith(ConfigurationManager.AppSettings["CookieDomain"]??"localhost",StringComparison.OrdinalIgnoreCase))
                        {
                            // TODO:refuse
    
                      orig =string.empty;
                } 
              }

    else if (!ConfigurationManager.AppSettings["Static"].Equals(orig, StringComparison.CurrentCultureIgnoreCase)) { orig = ConfigurationManager.AppSettings["Dynamic"]; } HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", orig); }
  • 相关阅读:
    缓存
    json集合取值
    四个div块点击某个突出显示
    table获取某一列的td
    鼠标悬浮tr追加背景颜色
    jquery弹出层
    面试题
    表单校验及正则表达式
    jquery操作DOM
    jquery的事件与动画
  • 原文地址:https://www.cnblogs.com/lxf1117/p/4253501.html
Copyright © 2011-2022 走看看