`

ajax跨域请求--jsonp实例

 
阅读更多

ajax请求代码:

 

[javascript] view plaincopy
 
  1. //区域事件选择配送点  
  2. function changeDistrict(value){  
  3.      if(value == 0){  
  4.          $('#transport_node').empty();  
  5.          $('#transport_node').append('<option value="0">请选择</option>');  
  6.          return;  
  7.      }  
  8.      $('#transport_node').empty();  
  9.      $('#transport_node').append('<option value="0">加载中...</option>');  
  10.      $.ajax({  
  11.          type: 'GET',  
  12.          url: "http://192.168.33.114:8080/UIDTraceAdmin/transportnode/pagelist/jsonp?callbackFunction=jsonpCallback",  
  13.          async: false,  
  14.          dataType: "jsonp",  
  15.          jsonp: "jsonpCallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)  
  16.          success: function(o){},  
  17.          timeout:3000    
  18.      });  
  19.  }  
  20.   
  21. function jsonpCallback(result) {     
  22.      if(result.success == true){          
  23.          $('#transport_node').empty();  
  24.          $('#transport_node').append('<option value="0">请选择</option>');  
  25.          $.each(result.transportList, function(i, n){  
  26.              var html = '<option value="'+n.nodeId+'">'+n.transportnodeName+'</option>';  
  27.              $('#transport_node').append(html)   
  28.          });  
  29.       }else{  
  30.          $('#transport_node').empty();  
  31.          $('#transport_node').append('<option value="0">请选择</option>');  
  32.       }   
  33. }    

要点:

1.url中的请求参数callbackFunction=jsonpCallback这是服务器响应返回后调用的javascript方法的名称

2.dataType要为jsonp

 

跨域服务器处理代码:

[java] view plaincopy
 
  1. @RequestMapping("/pagelist/jsonp")  
  2.     public void pagelist(@ModelAttribute TransportNode node,HttpServletRequest httpReq,  
  3.             HttpSession session,HttpServletResponse response) {  
  4.           
  5.         //返回头部设置    
  6.         response.setHeader("Pragma""No-cache");    
  7.         response.setHeader("Cache-Control""no-cache");   
  8.         response.setHeader("Content-type""application/x-javascript;charset=utf-8");  
  9.         response.setDateHeader("Expires"0);    
  10.           
  11.         String jsonpCallback = httpReq.getParameter("callbackFunction");//jsonp回调函数名   
  12.         JSONObject resultJson  = new JSONObject();   
  13.         PrintWriter out = null;        
  14.         try {  
  15.             out = response.getWriter();  
  16.         } catch (IOException e1) {  
  17.             e1.printStackTrace();  
  18.         }    
  19.         try {  
  20.             node.setRowStart((node.getPage() - 1) * node.getRows() + 1);  
  21.             node.setRowEnd(node.getPage() * node.getRows());  
  22.                                       
  23.             resultJson.put("transportList", JsonUtils.toJSONList(business.getList(node)));  
  24.             resultJson.put("success"true);      
  25.             System.out.println(resultJson.toString());  
  26.             out.println(jsonpCallback+"("+resultJson.toString()+")");//返回jsonp格式数据    
  27.             out.flush();    
  28.             out.close();    
  29.               
  30.         } catch (Exception e) {  
  31.             LogWriter.log("/pagelist/jsonp",e);  
  32.             try {  
  33.                 resultJson.put("success"false);  
  34.             } catch (JSONException e1) {  
  35.                 e1.printStackTrace();  
  36.             }       
  37.             out.println(jsonpCallback+"("+resultJson.toString()+")");//返回jsonp格式数据    
  38.             out.flush();    
  39.             out.close();    
  40.         }  

 

注意要点:

1.设置响应报文头,response.setHeader("Content-type", "application/x-javascript;charset=utf-8");,消除了"Resource interpreted as Script but transferred with MIME type text/plain",同时要根据自己的编码格式设置正确的编码;

2.jsonp的数据格式是:jsonpCallback+"("+resultJson.toString()+")"

举个例子:

jsonpCallback({
    "code": "aaa",
    "price": 1780,
    "tickets": 5
});

分享到:
评论

相关推荐

    PHP下ajax跨域的解决方案之jsonp实例分析.docx

    PHP下ajax跨域的解决方案之jsonp实例分析.docx

    PHP下ajax跨域的解决方案之jsonp实例分析

    主要介绍了PHP下ajax跨域的解决方案之jsonp,结合实例形式分析了PHP ajax跨域的解决方案jsonp相关原理、实现技巧与操作注意事项,需要的朋友可以参考下

    AJAX跨域请求JSONP获取JSON数据的实例代码

    Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。Ajax 这篇文章主要介绍了AJAX跨域请求JSONP获取JSON数据的实例代码,需要的朋友可以参考下

    JQuery的Ajax跨域请求原理概述及实例

    今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuery对于Ajax的跨域请求有两类解决...

    Ajax结合Jsonp实例

    使用Jquery中的Aajx方法利用Jsonp方式访问豆瓣公开的api接口,跨域获取书籍信息。

    原生js实现ajax请求和JSONP跨域请求操作示例

    主要介绍了原生js实现ajax请求和JSONP跨域请求操作,结合实例形式分析了基于原生js实现的ajax请求和JSONP跨域请求相关操作技巧与使用注意事项,需要的朋友可以参考下

    jquery+ajax实现跨域请求的方法

    本文实例讲述了jquery+ajax实现跨域请求的方法。分享给大家供大家参考。具体实现方法如下: 说明:这里的dataType 为 “jsonp” ;type 只能为 GET 前台请求代码如下: 代码如下:$.ajax({  type: “GET”,  url...

    jsonp跨域请求数据实现手机号码查询实例分析

    本文实例讲述了jsonp跨域请求数据实现手机号码查询的方法。分享给大家供大家参考,具体如下: 前言 网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php等,仅仅通过...

    js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)

    很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,...

    jquery中ajax跨域方法实例分析

    本文实例分析了jquery中ajax跨域。分享给大家供大家参考,具体如下: JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问 方法一: jsonp之 get...

    Ajax的jsonp方式跨域获取数据的简单实例

    下面小编就为大家带来一篇Ajax的jsonp方式跨域获取数据的简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    借助node实战JSONP跨域实例

    但,凡事都是有利弊,同源策略也导致了我们想用AJAX跨域请求,但NO!!为了规避这种限制,其中有一方法就是JSONP。 JSONP的基本思想:就是通过[removed]的src,向服务器请求数据,且这不受同源策略限制(img和iframe...

    原生js的ajax和解决跨域的jsonp(实例讲解)

    不说废话,先上一个用ajax请求下本地的一个.txt文件 &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/title&gt; [removed] [removed] =function...

    jquery ajax jsonp跨域调用实例代码

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

    ajax跨域访问WCP搜索,返回JSON数据

    实例代码分为前台和后台,前台为一个其他项目的搜索框,后台为WCP开源项目搜索的代码,作用是:在其他项目中整合WCP,并实现自己搜索的API,对检索内容进行拼接。有需要的可以下载一下。

    Apache中配置支持CORS(跨域资源共享)实例

    当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题,如果用jsonp或者proxy的方式进行修改的话未免需要太大的工程量,所以采用...

    详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】

    3.3、jQuery使用JSONP跨域 3.4、跨域资源共享(CORS) 3.5、小结 四、弹出层 五、模板引擎 5.1、Hello World 5.2、方法 5.3、与AJAX结合应用 六、示例下载 一、AJAX示例 AJAX全称为“Asynchronous JavaScript And...

Global site tag (gtag.js) - Google Analytics