`
pengyan
  • 浏览: 35989 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Jquery的跨域调用

阅读更多

 

 

Ajax的应用中,由于安全的问题,浏览器默认是不支持跨域调用的。传统解决的方法,包括:(参考http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/)

Local proxy:
Needs infrastructure (can't run a serverless client) and you get double-taxed on bandwidth and latency (remote - proxy - client).
Flash:
Remote host needs to deploy a crossdomain.xml file, Flash is relatively proprietary and opaque to use, requires learning a one-off moving target programming langage.
Script tag:
Difficult to know when the content is available, no standard methodology, can be considered a "security risk".

以上方法都各有缺陷,都不是很好多解决方案。后来出现了一种叫JSON with Padding 的技术,简称 JSONP .(原理参考http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/),应用JSONP可以实现JSON数据的跨域调用。非常的幸运,JQuery1.2以后支持JSONP的应用。下面侧重说明在JQuery中,Json的跨域调用。

      应用JSONP实现Json数据跨域调用,需要服务器端与客户端的合作完成。引用Jquery官方的例子,客户端掉用如下:

$.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("#images");
            if ( i == 3 ) return false;
          });
        });

 

    注意这里调用的地址中jsoncallback=?是关键的所在!其中,符号会被Query自动替换成其他的回调方法的名称,具体过程和原理我们这里不理会。我们关心的是jsoncallback=?起什么作用了?原来jsoncallback=?被替换后,会把方法名称传给服务器。我们在服务器端要做什么工作呢?服务器要接受参数jsoncallback,然后把jsoncallback的值作为JSON数据方法名称返回,比如服务器是JSP,我们会这样做:

 

      ...

      String jsoncallback=request.getParameter("jsoncallback");

      ...

      out.print(jsoncallback+"({\"account\":\"XX\",\"passed\":\"true\",\"error\":\"null\"})");

 

Jquery取得的数据可能如下:

      JQUET0988788({"account":"XX","passed":"true","error":"null"})

 

总结,用JSONP要做两件事:

      1/请求地址加参数:jsoncallback=?

      2/服务器段把jsoncallback的值作为方法名传回来,如JQUET098788(...)

 

 

分享到:
评论
1 楼 gtman 2009-08-18  
应用JSONP实现Json数据跨域调用,需要服务器端与客户端的合作完成

调用别人的服务器代码咧?这段代码就挂了,因为不知道别人返回的数据是什么格式

相关推荐

    jquery跨域调用 js跨域调用

    jquery跨域调用,js跨域调用,jsonp,跨域调用

    jquery跨域调用webservice

    jquery跨域调用webservice,采用jsonp,在webservice返回端采用HttpContext.Current.Response.Write返回json格式。,回调函数返回执行结果。

    jquery跨域调用wcf

    jquery调用不同服务器、不同地址下的wcf服务,解决了jquery的跨域调用问题

    JAVA调用外接设备(制卡机)---JQuery跨域

    JAVA调用外接设备(制卡机)---JQuery跨域,AJAX跨域问题

    jquery跨域实例java

    自己做的小例子,关于跨域调用。用的是jquery. 里面两个工程。A和B。用A调用B。 放在tomcat或myeclipse中就可以跑起来。以前做建行的项目。用到的。很实用。 两个工程可以放在不同的机器上。IP也不同。相当...

    ASP.NET配合jQuery解决跨域调用的问题.txt

    ASP.NET配合jQuery解决跨域调用的问题

    jquery wcf cross ,wcf 跨域

    个人收集jquery 跨域调用 wcf解决方案

    Jquery跨域请求的实现

    所以我猜是跨域问题,马上就去google搜索了一下jquery跨域的解决,是用$.getJSON这个方法,但是我测试了许久,还是不行,继续找,还是没能找到。于是沉下心来,自己想:现在就是我可以通过那个远程的方法在浏览器中...

    JQuery Ajax跨域调用和非跨域调用问题实例分析

    本文实例讲述了JQuery Ajax跨域调用和非跨域调用问题。分享给大家供大家参考,具体如下: 现在的互联网技术发展的越来越快,我们在开发过程中遇到的问题也越来越多。比如当我们需要进行跨域访问数据的时候该如何进行...

    Jquery Ajax 跨域调用asmx类型 WebService范例代码

    摘要:Ajax 在 Web 2.0 时代起着非常重要的作用,然而有时因为同源策略 (SOP)(俗称:跨域问题(cross domain)) 它的作用会受到限制。在本文中,将学习如何克服合作限制。本文以asmx方式搭建webservice作为测试用...

    跨域调用例子java,js,jquery

    自己做的小例子,关于跨域调用。用的是jquery. 里面两个工程。A和B。用A调用B。 放在tomcat或myeclipse中就可以跑起来。以前做建行的项目。用到的。很实用。 两个工程可以放在不同的机器上。IP也不同。相当于...

    跨域调用jQuery-XDomainRequest插件IE10以下浏览器支持

    jQuery XDomainRequest 是一个利用 XDomainRequest 对象为 IE8、IE9 实现跨域资源共享(CORS - Cross Origin Resource Sharing)的 jQuery 插件。

    MVC+WebAPI跨域调用.rar

    简单例子这是关于Jquery调用WebAPI跨域的例子。

    基于jquery的跨域调用文件

    利用jquery.getScript()跨域调用文件,具体说这个文件可以是什么类型还有待于进一步跟进。

    ASP.NET配合jQuery解决跨域调用的问题

    使用JSONp方式调用 不做详细讲解,可以参考jq文档《jQuery 1.10.3 在线手册》 二. 服务端配置 修改Web.config 文件 &lt;modules runAllManagedModulesForAllRequests=true&gt;&lt;/modules&gt; */&gt; &lt;add name=...

    jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友

    用JQuery里的getJSON函数进行跨域远程调用

    这是一个前端后端通过JQuery的getJSON函数交互json数据的例子。 前端网页是front.html,后端处理的模块是back.jsp 把back.jsp、front.html及jquery-1.8.3.min.js部署在Tomcat的webapps的ROOT下,通过在浏览器输入...

    jQuery实现跨域iframe接口方法调用

    页面a.html域名为www.a.com嵌入页面http://www.b.com/b.html,b.html要调用a.html中的js函数,由于两个页面不在一个域中,会提示没权限。如何解决该问题呢,请看下面示例代码。

Global site tag (gtag.js) - Google Analytics