非常教程

JSON教程

JSON获取

AJAX跨域请求获取JSON数据

我们都知道,AJAX的一大限制是不允许跨域请求。不过通过使用JSONP来实现。JSONP是一种通过脚本标记注入的方式,它是可以引用跨域URL的js脚本,不过需要提供一个回调函数(必须在您自己的页面上),因此,你可以自己处理结果。 本文介绍了JSONP的是怎么在jQuery,MooTools的,Dojo Toolkit中实现的。 

jQuery的JSONP

jQuery.getJSON方法:

Js代码

代码如下:

jQuery.getJSON("http://search.twitter.com/search.json?callback=?",{ 
    q: "Arsenal" 
},function(tweets) { 
    // Handle response here 
    console.info("Twitter returned: ",tweets); 
});

或者类似

Js代码

代码如下:

$.ajax({ 
         type:"get", 
         data:"random="+Math.random(), 
         url:url, 
         dataType:"jsonp", 
         jsonp:"callback", 
         success:function(data){ 
         $.each(data, function(key, val) { 
         $("#myDiv").html($("#myDiv").html()+val.cvalue+"</br>"); 
         }); 
        } 
      }); 

回调方法的参数通过 getJSON 就可以获取到json对象

MooTools JSONP

MooTools 需要 Request.JSONP Class,可以从这里下载MooTools More。选择Request.JSONP

这样从另一个域获取json就是小菜一碟了

Js代码

代码如下:

new Request.JSONP({ 
    url: "http://search.twitter.com/search.json", 
    data: { 
        q: "Arsenal" 
    },//提交的参数, 没有参数可以不写 
        callbackKey: 'jsoncallback',//自己定义回调函数的参数名称 
        onComplete: function(tweets) { 
        // Log the result to console for inspection 
        console.info("Twitter returned: ",tweets); 
    } 
}).send(); 

如果自己定义了回调函数的参数名称,跟jquery一样

服务器端你需要这样去取得:

Js代码

代码如下:

String callback = request.getParameter("jsoncallback");//取得回调方法名 
        response.setHeader("Cache-Control", "no-cache"); 
        response.setContentType("text/json;charset=UTF-8"); 
        PrintWriter out; 
        try { 
            out = response.getWriter(); 
            out.print(callback+"("+message+")");//这里是关键.主要就是这里 
            out.flush(); 
            out.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 

顺便说一句: 个人比较喜欢mootools的语法结构,和框架设计思路. 再次赞美!

Dojo JSONP

JSONP 在Dojo Toolkit 中需要用上dojo.io.script (点击可以查看示例)

Js代码

代码如下:

// dojo.io.script is an external dependency, so it must be required 
dojo.require("dojo.io.script"); 

// When the resource is ready 
dojo.ready(function() { 

    // Use the get method 
    dojo.io.script.get({ 
        // The URL to get JSON from Twitter 
        url: "http://search.twitter.com/search.json", 
        // The callback paramater 
        callbackParamName: "callback", // Twitter requires "callback" 
        // The content to send 
        content: { 
            q: "Arsenal" 
        }, 
        // The success callback 
        load: function(tweetsJson) {  // Twitter sent us information! 
            // Log the result to console for inspection 
            console.info("Twitter returned: ",tweetsJson); 
        } 
    }); 
}); 

JSONP是一种非常有效的,可靠的,容易实现的远程数据获取方式。JSONP的策略也使开发人员能够避免繁琐的服务器代理方式,很方便的获取数据。

JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

客户端代码:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
  <script type="text/javascript">  
    function jsonpCallback(result) {  
      //alert(result);  
      for(var i in result) {  
        alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
      }  
    }  
    var JSONP=document.createElement("script");  
    JSONP.type="text/javascript";  
    JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";  
    document.getElementsByTagName("head")[0].appendChild(JSONP);  
  </script>

服务端代码:

<?php  
  
    //服务端返回JSON数据  
    $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
    $result=json_encode($arr);  
    //echo $_GET['callback'].'("Hello,World!")';  
    //echo $_GET['callback']."($result)";  
    //动态执行回调函数  
    $callback=$_GET['callback'];  
    echo $callback."($result)";

相关教程

AJAX教程

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等),易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。从Web API和服务端编程语言到NoSQL数据库和客户端框架,都有JSON的身影,在不同平台间传递数据方面,JSON已成为XML强有力的替代者。

主页 http://www.json.org/json-zh.htmljson
源码 https://github.com/topics/json

JSON目录

1. JSON教程
2.JSON 教程
3.JSON 基础
4.json格式
5.JSON 示例
6.JSON解析
7.JSON遍历
8.JSON调用
9.JSON转换
10.JSON获取
11.JSON字符串
12.JSON数组
13.JavaScript 教程
14.JSON 教程
15.JavaScript 注释
16.JavaScript 语句
17.JavaScript 输出
18.JavaScript 用法
19.JavaScript 简介
20.JavaScript switch 语句
21.JavaScript If…Else 语句
22.JavaScript 比较和逻辑运算符
23.JavaScript 运算符
24.JavaScript 函数
25.JavaScript 对象
26.JavaScript 数据类型
27.JavaScript 变量
28.JavaScript for 循环
29.JavaScript HTML DOM 事件
30.JavaScript HTML DOM 改变 CSS
31.JavaScript HTML DOM 改变 HTML 内容
32.JavaScript HTML DOM
33.JavaScript 表单验证
34.JavaScript 错误 – Throw、Try 和 Catch
35.JavaScript break 和 continue 语句
36.JavaScript while 循环
37.JavaScript HTML DOM 元素 (节点)
38.JavaScript Number 对象
39.JavaScript 对象
40.JavaScript Date(日期)对象
41.JavaScript 字符串(String)对象
42.JavaScript Window History
43.JavaScript Window Location
44.JavaScript Window Screen
45.JavaScript Window
46.JavaScript RegExp 对象
47.JavaScript Math(算数)对象
48.JavaScript Boolean(布尔)对象
49.JavaScript Array(数组)对象
50.JavaScript 实例
51.JavaScript 测试 Prototype
52.JavaScript 测试 jQuery
53.JavaScript 库
54.JavaScript Cookie
55.JavaScript 计时事件
56.JavaScript 弹窗
57.JavaScript Window Navigator
58.JavaScript HTML DOM 实例
59.JavaScript 对象实例
60.JavaScript 总结
61.JavaScript 浏览器对象实例
62.JSON 语法
63.JSON 使用
64.JSON 简介
65.JavaScript 保留关键字
66.JavaScript 字符串
67.JavaScript 事件
68.JavaScript 作用域
69.JavaScript JSON
70.JavaScript HTML DOM EventListener
71.JSONP 教程
72.javascript:void(0) 含义
73.JavaScript 语法
74.JavaScript 调试
75.JavaScript 闭包
76.JavaScript 函数调用
77.JavaScript 函数参数
78.JavaScript 函数定义
79.JavaScript 类型转换
80.JavaScript typeof, null, 和 undefined
81.JavaScript 正则表达式
82.JavaScript JSON.stringify()
83.JavaScript JSON.parse()
84.JavaScript 代码规范
85.JavaScript 使用误区
86.JavaScript 严格模式(use strict)
87.JavaScript 变量提升
88.JavaScript 验证 API
89.JavaScript 表单
90.JSON.stringify()
91.JSON.parse()
92.JSON 数组
93.JSON 对象
94.JavaScript HTML DOM 节点列表
95.JavaScript HTML DOM 集合(Collection)
96.JavaScript let 和 const
97.JavaScript this 关键字
98.JavaScript prototype(原型对象)
99.JSON vs XML
100.JavaScript Promise