Robin's Blog

记录 积累 学习 成长

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近的项目中,需要调用js访问远程url来获取相应的数据。而jQuery从1.2时代就开始支持$.getJSON()函数了,来获取远程url传递回来的格式为jsonp的数据,函数格式如下:

$.getJSON( url, [data][callback] )

必选参数url为远程目标链接地址,可选参数data为传递给目标链接地址参数,格式为{键:值},可选参数callkack为回调函数,用法会在下面展示。

   客户端部分:

   $.getJSON('http://www.example.com/example.php?jsoncallback=?',  {id:89,name:john},function(msg)

       //msg是以jsonp***{键:值}返回来的所要的数据,譬如msg.id表示键名为id的值

      var return_code = parseInt(msg.return_code);
      if(return_code == 0)
       {
            var myPassportName = msg.my_passport_name;
            var peerUserRelationship = parseInt(msg.user_relationship);

            myAlert(myPassportName , peerUserRelationship);

   );

  服务器端部分(以php为例):

    if(isset($_REQUEST['jsoncallback']))

   {

       $jsoncallback = $_REQUEST['jsoncallback'];

      exit($jsoncallback.'('.json_encode($array_return).')');

   }

注意添加的格式。

 

 

附:

jQuery中getJSON是通过创建script标签欺骗的方式,将目标url添加进其src属性值中,在DOM装载中来执行,源码分析如下:

   if ( s.dataType == "script" && type == "GET"
                && remote.test(s.url) && remote.exec(s.url)[1] != location.host ){
            var head = document.getElementsByTagName("head")[0];
            var script = document.createElement("script");
            script.src = s.url;

            if (s.scriptCharset)
                script.charset = s.scriptCharset;

            // Handle Script loading
            if ( !jsonp ) {
                var done = false;

                // Attach handlers for all browsers
                script.onload = script.onreadystatechange = function(){
                    if ( !done && (!this.readyState ||
                            this.readyState == "loaded" || this.readyState == "complete") ) {
                        done = true;
                        success();
                        complete();
                        head.removeChild( script );
                    }
                };
            }

            head.appendChild(script);

好了,暂时介绍这么多,欢迎各位同仁进行讨论或指正。

posted on 2009-05-21 17:57  Robin99  阅读(415)  评论(0编辑  收藏  举报