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.QueryString["jsoncallback"];
...
Response.Write(jsoncallback+"({\"account\":\"XX\",\"passed\":\"true\",\"error\":\"null\"})");
Jquery 取得的数据可能如下:
JQUET0988788({"account":"XX","passed":"true","error":"null"})
总结,用JSONP要做两件事:
1/请求地址加参数:jsoncallback=?
2/服务器段把jsoncallback的值作为方法名传回来,如JQUET098788(...)
分享到:
相关推荐
本篇将详细讲解如何使用getJSON来解决跨域问题,以及涉及到的相关技术点。 首先,我们要理解什么是跨域。跨域是指一个域下的文档或脚本尝试请求另一个域下的资源时,如果两个域不相同,就会触发跨域安全策略。例如...
本篇将详细介绍如何解决jQuery跨域问题,涉及的方法包括$.get、$.post和$.getJSON等。 首先,我们需要理解什么是跨域。同源策略是浏览器为保障安全而实施的一项机制,它规定JavaScript只能访问与当前页面同源(协议...
JQuery的跨域解决方案主要依赖于JSONP(JSON with Padding)技术。JSONP是一种绕过同源策略的方式,它利用HTML中的`<script>`标签没有同源策略限制的特点。当jQuery使用`dataType: 'jsonp'`时,它实际上是在做以下几...
### Jquery跨域Json请求处理详解 #### 一、跨域问题概述 在现代Web开发中,跨域问题是一个常见的技术挑战。简单来说,当一个网页尝试从不同的源(源可以理解为协议、域名或者端口号)加载资源时,就会遇到跨域限制...
这是一个前端后端通过JQuery的getJSON函数交互json数据的例子。 前端网页是front.html,后端处理的模块是back.jsp 把back.jsp、front.html及jquery-1.8.3.min.js部署在Tomcat的webapps的ROOT下,通过在浏览器输入...
本示例"Jquery跨域Ajax请求测试"将详细讲解如何利用jQuery实现这一功能。 首先,了解同源策略是理解跨域问题的关键。同源策略是浏览器为了保障用户安全而设定的一项机制,它规定了只有来自同一协议、同一域名和同一...
### jQuery $.getJSON() 跨域请求知识点总结 #### 跨域请求基础 在Web开发中,跨域请求是一个非常常见的问题,它的本质是浏览器的同源策略。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源...
标题 "jquery跨域获取json" 涉及到的是JavaScript中的一个常见问题,即如何在浏览器环境中使用jQuery库跨越域限制获取JSON数据。这通常涉及到AJAX请求和JSONP(JSON with Padding)技术。 首先,我们需要理解Web...
在标题“jQuery跨域问题解决方案”中提到的JSONP(JSON with Padding)便是其中一种。JSONP允许跨域访问,其工作原理是允许用户传递一个回调函数名给服务器,然后服务器将返回一段JavaScript代码,其中包括了调用该...
本文将详细讨论如何使用 jQuery 的 AJAX 和 `getJSON` 实现跨域访问。 首先,了解跨域的基本概念。跨域是指一个源(协议+域名+端口)下的文档或脚本尝试请求另一个源的资源时,浏览器会实施同源策略,阻止这种行为...
这里的"Ajax + jQuery跨域获取JSON"是一个典型的Web开发技术应用场景,主要用于解决Web应用程序中不同源之间的数据共享问题。在本案例中,开发者成功地实现了跨域请求以获取JSON数据,并将这些数据用于展示天气预报...
jQuery跨域调用主要是通过JSONP(JSON with Padding)和CORS(Cross-Origin Resource Sharing)这两种机制来实现的。JSONP是一种非官方的跨域数据交互协议,而CORS是W3C标准,允许服务器声明哪些来源可以访问其资源...
这是一份非常有用的Jquery跨域访问实例,里面提供了3种方法,前台后台都有涉及,希望对你们会有所帮助
jQuery跨域问题主要涉及到以下几种情况: 1. JSONP(JSON with Padding):JSONP是一种绕过同源策略的方法,通过动态插入`<script>`标签来请求数据。jQuery的`$.ajax()`或`$.getScript()`函数支持JSONP。当设置`...
在使用`jQuery.getJSON`时,我们还需要考虑错误处理。可以使用`.fail()`或`.catch()`来捕获和处理错误: ```javascript $.getJSON("server.php") .done(function(json) { // 处理成功情况 }) .fail(function...
JSONP(JSON with Padding)是一种常见的解决JavaScript跨域问题的技术,尤其在jQuery中得到了广泛的应用。由于浏览器的同源策略限制,JavaScript通常无法在不同源之间进行Ajax请求。但JSONP巧妙地利用了HTML中`...
jquery的getJSON方法可以更容易地解决跨域问题。例如,在服务器a上如果要请求服务器b上的数据,可以使用jquery的getJSON方法来请求数据。jquery的getJSON方法会自动将请求转发到服务器b上,然后将响应返回给客户端。...
总之,jQuery通过`$.getJSON()`和JSONP机制为开发者提供了一种简单的方式来实现跨域数据请求,使得在前后端分离的架构中,前端可以轻松地获取和处理来自其他域的数据。虽然有一些限制,但在许多场景下,JSONP仍然是...
在处理跨域请求时,jQuery提供了$.ajax()或$.getJSON()等函数,使得跨域AJAX请求变得简单。 接下来,我们将探讨如何实现js+jsp+json+tomcat的跨域访问。 1. **jQuery的JSONP(JSON with Padding)** JSONP是一种...