ajax请求代码:

  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. ....//详细代码省略
  23. }

要点:

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

2.dataType要为jsonp

跨域server处理代码:

  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.跨域server响应给给client的数据为:要调用的javascript函数名称(json格式的数据),在这个样例中,比方响应返回了例如以下的数据

jsonpCallback({

    "code": "aaa",

    "price": 1780,

    "tickets": 5

});

client接收到数据后。调用

  1. function jsonpCallback(result) { ...}

{ "code": "aaa","price": 1780,"tickets": 5}会自己主动解析成result。

要訪问数据中的“code”的值,在函数体里写result.code就可以。

ajax跨域请求--jsonp实例的更多相关文章

  1. Ajax跨域:Jsonp实例--百度搜索框下拉提示

    Ajax跨域:Jsonp实例--百度搜索框下拉提示 一.总结 一句话总结:a.找好接口:b.用script标签的src引入文件(json数据):c.定义及实现上一步引入文件中的函数 1.如何找到一个网 ...

  2. AJAX 跨域请求 - JSONP获取JSON数据

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...

  3. 【JS跨域请求】Ajax跨域请求JSONP

    前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白 ...

  4. Ajax跨域请求数据实例(JSOPN方式)

    今天在做取消申请的时候遇到了一个跨域ajax提交的问题. 情景是: 系统A是asp.net的站点,其中包括一个取消申请的接口(get方式通过参数提交到系统的某一个页面,然后返回提交成功或失败) 系统B ...

  5. 【转】AJAX 跨域请求 - JSONP获取JSON数据

    来源:http://justcoding.iteye.com/blog/1366102/ Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流 ...

  6. ajax跨域请求のJSONP

    简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级 ...

  7. ajax跨域请求-jsonp

    1. 同源策略 ajax之所以需要“跨域”,罪魁祸首就是浏览器的同源策略.即,一个页面的ajax只能获取这个页面相同源或者相同域的数据. 如何叫“同源”或者“同域”呢?——协议.域名.端口号都必须相同 ...

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

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

  9. jsonp其实很简单【ajax跨域请求】

    js便签笔记(13)——jsonp其实很简单[ajax跨域请求] 前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资 ...

随机推荐

  1. 关于RMAN的配置信息存储和控制文件的关系

    没有使用catalog时,rman中的所有配置信息都会记入在 控制文件中 控制文件中dump出来的信息: *********************************************** ...

  2. nginx启动

    查看nginx的进程 ps -ef | grep nginx 重启nginx的3种办法1.service nginx restart2.改了配置文件让其生效办法 nginx -s reload3.到n ...

  3. 「操作系统」:The most useful condition codes

    CF: Carry Flag.The most recent operation generated a carry out of the most significant bit. Used to ...

  4. poj 2021 Relative Relatives(暴力)

    题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...

  5. Android 自定义view实现水波纹效果

    http://blog.csdn.net/tianjian4592/article/details/44222565 在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了 ...

  6. OracleDBConsoleorcl无法启动

    OracleDBConsoleorcl无法启动 向左转|向右转 提问者采纳  2010-10-13 19:40 我前几天刚解决了这个问题 这个错误原因是因为你的ip是动态获取的,你在安装Oracle时 ...

  7. JS - 删除确认

    <a href="javascript:if(confirm('确实要删除吗?'))location='<{:U('Admin/Update/deleteuserinfo', a ...

  8. windowsphone中获取手机位置信息

    首先在界面中加入一个textblock控件以显示信息 using System; using System.Collections.Generic; using System.IO; using Sy ...

  9. java类和对象的基础(笔记)

    在Java类的设计中,有时希望一个类在任何时候只能有一个实例.这时可以将该类设计为单例模式(singleton).要将一个类设计为单例模式,需要把类的构造方法的访问修饰符声明为private,然后在类 ...

  10. vim下设置tab

    前言:大多数情况下tab键的宽度设置为4个空格,这个可以根据自己 的代码风格进行替换,然而当你提交不同的语言的代码的时候python 和c的时候就有区别了.c的话一般tab键做缩进,而python提交 ...