• Jsonp 跨域的原理以及Jquery的解决方案


    原理:JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。这种跨域的通讯方式称为JSONP。

    个人理解:

         就是在客户端动态注册一个函数function a(data),然后将函数名传到服务器,服务器返回一个a({/*json*/})到客户端运行,这样就调用客户端的function a(data),从而实现了跨域.

    <!DOCTYPE html PUBLIC "-//W//DTD XHTML Transitional//EN" "http://www.worg/TR/xhtmlDTD/xhtmltransitional.dtd">  
    <html xmlns="http://www.worg/xhtml" >  
    <head>  
        
    <title>Test Jsonp</title>  
        <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>      
        <script type="text/javascript">  
                
    function jsonpCallback(result)   
                {              
                     $.each(result.items, 
    function(i,item){
                           $(
    "<img/>").attr("src", item.media.m).appendTo("body");
                           
    if ( i == 3 ) return false;
                     });  
                }   
            
    </script>
    </head>  
    <body>  
    <script type="text/javascript" src="http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jsonpCallback"></script>   
    </body>  
    </html>

    jQuery的解决方案:

    <!DOCTYPE html PUBLIC "-//W//DTD XHTML Transitional//EN" "http://www.worg/TR/xhtmlDTD/xhtmltransitional.dtd">  
    <html xmlns="http://www.worg/xhtml" >  
    <head>  
        
    <title>Test Jsonp</title>  
        <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>      
        <script type="text/javascript">
            $(
    function() {
                
    $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?"function(data) {
                    $.each(data.items, 
    function(i, item) {
                        $(
    "<img/>").attr("src", item.media.m).appendTo("body");
                        
    if (i == 3return false;
                    });
                });
            });        
        
    </script>
    </head>  
    <body></body>  
    </html>

    jquery 的jsoncallback是动态生成的,真正请求服务器的地址:http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jsonp1274058545738


    --------------------------------------------------------------------------
    Daniel Chow's Blog - 不管你在哪里,都要有一颗创业的心!
    http://www.cnblogs.com/DanielChow/
  • 相关阅读:
    NodeJS笔记:处理非utf8编码
    SQL Server存储过程中的异常处理
    "岛主" 同学给我出的算法题
    学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
    如何在数据表中存取图片 回复 "三足乌" 的问题
    学 Win32 汇编[19]: 查看二进制等相关函数
    如何删除动态数组的指定元素 回复 "Splendour" 的部分问题
    学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
    学 Win32 汇编[22] 逻辑运算指令: AND、OR、XOR、NOT、TEST
    学 Win32 汇编[20]: 洞察标志寄存器
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1737070.html
Copyright © 2020-2023  润新知