• jquery跨域请求解决方案(我们寻找,我还没有添加验证)


    http://www.3lian.com/edu/2014/02-10/127921.html
    
    本篇文章仅仅要是对jquery ajax跨域解决方法(json方式)进行了介绍,须要的朋友能够过来參考下,希望对大家有所帮助
    近期公司开发的项目中非常多地方须要跨域ajax请求,比方几个子域名下 
    http://a.****.com/index123.aspx, 
    http://b.****.com/index2.aspx 
     
    都要请求用户json信息,然后再对数据进行处理,起初我和同事们试了非常多种方法。使用$.ajax() 不管是get或post方法都会引起uri deny的错误。一番GG之后发现了解决方法。也了解当中的原因。
     
    jquery从1.2開始,.getJSON就支持跨域操作了。使用jquery.getJSON()方法能够解决跨域问题。

    实比例如以下 前台 <script type="text/javascript" src="/script/jquery.js"></script> HTML中JS代码 function gettst2() { $.getJSON("http://ucenter.xxxx.com.cn/ajax/test.aspx?

    callback=?", { id: "123456", site: "01" }, function(data) { alert(data.htmls); document.getElementById("shows").innerHTML = data.htmls; }); } gettst2(); ASPX.cs文件里处理为 string jsoncall = Request.QueryString("callback"); Response.Write(jsoncall + "({htmls:測试001})"); 假设加html代码的话。千万别加/n 符号,不然会出现乱码,js 错误。


    资料二:

      今天在项目中须要做远程数据载入并渲染页面。直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuery对于Ajax的跨域请求有两类解决方式,只是都是仅仅支持get方式。

    各自是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式。

            什么是jsonp格式呢?API原文:假设获取的数据文件存放在远程server上(域名不同,也就是跨域获取数据)。则须要使用jsonp类型。使用这样的类型的话。会创建一个查询字符串參数 callback=? ,这个參数会加在请求的URL后面。server端应当在JSON数据前加上回调函数名。以便完毕一个有效的JSONP请求。意思就是远程服务端须要对返回的数据做下处理,依据client提交的callback的參数,返回一个callback(json)的数据。而client将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也相同支持jsonp的数据方式调用。

            clientJQuery.ajax的调用代码演示样例:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $.ajax({
        type : "get",
        async:false,
        url : "http://www.xxx.com/ajax.do",
        dataType : "jsonp",
        jsonp: "callbackparam",//服务端用于接收callback调用的function名的參数
        jsonpCallback:"success_jsonpCallback",//callback的function名称
        success : function(json){
            alert(json);
            alert(json[0].name);
        },
        error:function(){
            alert('fail');
        }
    });
        服务端返回数据的演示样例代码:
    ?
    1
    2
    3
    4
    5
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        String callbackFunName = context.Request["callbackparam"];
        context.Response.Write(callbackFunName + "([ { name:"John"}])");
    }


    资料三:

    from : http://www.myquickphp.com/archives/147

    (请求的跨域server不支持常规”?”查询请求时的解决方式)

    昨天第一次做VIP需求时。发现一个超奇怪的问题。我有下面URL地址:

     

    http://dynamic.vip.xxxxxx.com/active/<controllers>/<active>/<id>

     

    放在浏览器地址栏中訪问能够得到正确的输出,但我一放到 AJAX 中去异步请求后用 FireBug 调试时确怎么都不出结果,和水龙兄一起调试了非常久都没有发现是什么问题,因为这个URL对方的程序是用XX框架写的,我是第一次使用这个XX框架进行开发,对它不是非常熟(有时间要研究一下它的内核源代码)。总以为是它什么地方有设置影响了的;就在我快要吐血时,乐锋(对这块比較了解的哥们)最终上线了。我把问题向他说下后,他第一反应就是:”你是不是跨域訪问了。。

    OH FUCK,我和水龙一直研究程序逻辑。居然忽视了自己的当前域名,由于我当前运行请求的域名是:

     

    http://vip.xxxxxx.com/active1/index.html

     

    问了一下乐锋,现系统中已提供的几个方案(函数)都不太令人惬意或太烦琐了,和乐锋讨论了几种方案后,一时没有找到最好解决方式,一看时间,22:00了。天色已晚,不打搅他晚上陪老婆了!回到家里本想通过利用 iframe 来载入跨域的 url 来得到 dom 数据,研究后发现的想法太天真了,JS的安全策略跟本不同意我这样做;想通过 proxy 代理的方案,但想了一下,那比方今系统中所使用的方案更麻烦。具体研究了一下jQuery最新版关于跨域的解决方式后,最终让我研究出了一种很方便的解决方式:
    例如以下是代码演示样例:
    —————— http://a.com/index.html ——————-

    <script type="text/javascript" src="jquery-1.4.2.js"></script>
    <script type="text/javascript">
    /*
    AJAX跨域问题完美解决方式
    研究:袁维
    启发:乐锋
    */
    function jsonCallBack(url,callback)
    {
    $.getScript(url,function(){
    callback(json);
    });
    }
    function fun1()
    {
    jsonCallBack('http://b.com/b.php',function(json){
    alert(json.message);
    })
    }
    </ script>
    <button type="button" onclick="fun1()">跨域訪问</button>
    —————— http://b.com/b.php ——————-

    <?php
    $ary 
    = array('result'=>0,'message'=>'跨域成功');
    $json json_encode($ary);
    //一定要这样定义输出最后的JSON数据,这是利用JS的闭包特性
    echo "var json=$json;";
    ?>

     

    该方案注意事项:
    1:jQuery的版本号必需大于 1.2版,否则不支持跨域处理
    2:仅仅支持 GET 方式的请求
    2:请求的 URL 必需按例如以下样例中那样返回数据.
    该方案注意利弊:
    长处:
    1:比用 iframe 加输出 parent.XXX() 的方案简单高效明了,前端处理更方便
    2:相当 proxy 方式在编程上也简单多了
    缺点:
    1:必需使用jQuery。
    2:返回的数据格式必需按演示样例样。当然不限于JSON。但它是处理最方便的.
    (跨域server支持常规”?”查询请求的解决方式,利用JQuery的JSONP)
    ——————— http://b.com/index ———————-

    <script src="jquery-1.4.2.js" type="text/javascript"></script>
    <script type="text/javascript">
    function fun1()
    {
    $.getJSON("http://a.com/c.php?no=10&msg=ok&format=json&jsoncallback=?",
    function(data){
    alert(data.msg);
    });
    }
    </script>
    <button type="button" onclick="fun1()">跨域处理</button>


    ——————– http://a.com/c.php ———————-

    <?php
    $no 
    $_GET['no'];
    $msg $_GET['msg'];
    $json json_encode(array('no'=>$no,'msg'=>$msg));
    //必需下面这样输出
    echo $_GET['jsoncallback'].'('.$json.')';


     



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    下载MATLAB硬件支持包的方法
    chromium 编译源码里面的单一模块 测试用例
    cc/animation
    raster 像素化
    Property Trees & DispalyItem
    Charles的HTTPS抓包
    git 修改.gitignore后未生效
    Word2Vec原理详解
    Pytorch中的Embedding
    在mac m1上安装tensorflow报错“zsh: illegal hardware instruction”
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4866833.html
Copyright © 2020-2023  润新知