您的位置:首页 > Web前端 > JavaScript

js跨域解决方法

2013-11-01 00:00 417 查看
这两天做单点登陆,由于需要开发第三方平台去做用户信息验证,因此用到了js跨域请求,找了很多方法都无法实现,最后采用jquery的$.getJSON完美实现。

现将实现方法记录下来,做以后参考。

由于Javascript 的安全机制,脚本是不允许跨域的 ( 安全的问题,浏览器默认是不支持跨域调用的 ) ,如jquery的post/get/load等,还有利用最原始的iframe实现异步方法调用都无济于事。通过网络各种查找,发现有一种叫 JSON with Padding 的技术,简称 JSONP。但是本身怎么实现也没搞懂,还是在jqueryAPI文档中各种寻找跨域方法。终于让我发现了getJSON这个方法。

引用自jquery1.2API文档

jQuery.getJSON(url,[data],[callback]) 通过 HTTP GET 请求载入 JSON 数据。 在 jQuery 1.2 中,您可以跨域加载 JSON 数据。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 注意:此行以后的代码将在这个回调函数执行前执行。 -------------------------------------------------------------------------------- Load JSON data using an HTTP GET request. As of jQuery 1.2, you can load JSON data located on another domain if you specify a JSONP callback, which can be done like so: "myurl?callback=?". jQuery automatically replaces the ? with the correct method name to call, calling your specified callback. Note: Keep in mind, that lines after this function will be executed before callback.
实现方式:
客户端代码:

<script type="text/javascript">

jQuery.getJSON("http://www.dlm.com/getMyJsonData.jsp?callback=?", function(data) {

alert(data);

});

</script>

注意:红色部分为必代参数,添加到你的url后面。因为jquery会将回调函数的名称通过这个参数传到服务器端,服务器商再将此函数名称与结果一同传回到前端,返回值是以参数形式传给此函数即可完成回调。[具体看服务端代码]
服务端代码:

//根据传递参数获取回调函数名称

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

String result="返回结果"; //注:这里可以将结果封装成json数据返回到前端

out.println(callback+"(\""+result+"\")");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息