zoukankan      html  css  js  c++  java
  • 使用Jsonp方式跨域获取json

    以前遇到过ajax跨域的问题,自己也写过一个简单的servlet 请求代理 来解决过同源策略带来的ajax跨域问题,详细见这个

    http://8366.iteye.com/blog/452441

     今天在网上发现 使用JQuery+Jsonp 也可以解决ajax跨域问题

    首先看下 jsonp 是如何解决跨域问题的,详细见 下面两篇文章

    使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup

    http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/

    使用 JSONP 实现跨域通信,第 2 部分: 使用 JSONP、jQuery 和 Yahoo! 查询语言构建 mashup

    http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp2/

     一个JQuery+jsnop 跨域的例子

    步骤:

     1.在tomcat中配置两个web项目 一个是 /oa  ,一个是/jofc2

     2.在/oa项目中有个testJQuery.jsp 中发送一个ajax请求到 http://localhost:9090/jofc2/ajax.jsp?callback=? 这是一个跨域请求

     3.在testJQuery.jsp  中接受跨域请求的结果

    实现步骤:

    1. ajax请求代码 必须是get方式

    Js代码  收藏代码
    1. //使用jsonp 跨域访问   
    2.     $.ajax({  
    3.          type: "get",  
    4.         //url: "http://www.cnblogs.com/rss",  
    5.         //  url: "http://suggest.taobao.com/sug?code=utf-8&q=mp3&callback=callback",  
    6.         url: "http://localhost:9090/jofc2/ajax.jsp?callback=?",  
    7.       // url: "http://133.64.80.9:9082/bz/ajax.jsp?callback=?",  
    8.         beforeSend: function(XMLHttpRequest){  
    9.             //ShowLoading();  
    10.         },  
    11.         dataType : "jsonp",     
    12.         jsonp: 'callback',  
    13.         success: function(data,textStatus){  
    14.             $("#loadrss").html("1234");  
    15.             //alert(textStatus);  
    16.             alert(data.length);  
    17.             alert(data[0].name);  
    18.             alert(data[1].name);  
    19.               
    20.             $(data).each(function(i, item){  
    21.                 //jquery 处理html 数据 ,找title 元素  
    22.                 //$("#loadrss").append("<li>"+$(domEle).children("title").text()+"</li>");  
    23.                 //jquery 处理Json 数据  
    24.                 $("#loadrss").append("<li>"+item.name+"</li>");  
    25.             });  
    26.         },  
    27.         complete: function(XMLHttpRequest, textStatus){  
    28.             //HideLoading();  
    29.         },  
    30.         error: function(){  
    31.             //请求出错处理  
    32.         }  
    33.         });  

     2. 服务器端 业务处理,把处理结果写到输出流里 注意输出流利json串的写法

    Java代码  收藏代码
    1. <%@ page contentType="text/html;charset=UTF-8" language="java"%>  
    2. <%@page import="java.io.PrintWriter"%>  
    3.   
    4.   
    5. <%  
    6.     //服务器端接到回调函数名字输出回调函数,客户端根据回调函数进行解析取得函数中json对象      
    7.     response.setContentType("text/html; charset=utf-8");      
    8.     String callback=request.getParameter("callback");      
    9.     PrintWriter ss = response.getWriter();      
    10.     ss.print(callback+"([ { name:\"跨域访问成功!\"},{ name:\"跨域访问失败!\"}])");      
    11.   
    12. %>    

    3.这样前台就可以跨域访问资源了,这种解决方案不足之处是:a.服务器端和客户端必须都按照jsnop的方式 b.不能捕获异常

    4.测试时候 访问 http://localhost:9090/oa/testJQuery.jsp

  • 相关阅读:
    队列

    Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED
    连续三月涨势明显,PostgreSQL 将崛起?
    Oracle物理DG自动切换——Dataguard Broker配置
    MSSQL索引视图(indexed view)之简述及使用
    连续三月涨势明显,PostgreSQL 将崛起?
    Scheduler & Task & Worker & Thread & Request & Session & Connection of SQL Server
    MSSQL内存架构及管理
    MSSQL数据库后台进程(线程)
  • 原文地址:https://www.cnblogs.com/yqskj/p/3133255.html
Copyright © 2011-2022 走看看