json和jsonP小结

web前端开发需要学历吗 web前端开发需要ios吗 前端开发需要加班吗

html 代码片段

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
    <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
    <title>JsonTest</title>
</head>
<body>
    <h2>JSON Object Creation in JavaScript</h2>
    <p>
        Name: <span id=”jname”></span><br>
        Age: <span id=”jage”></span><br>
        Address: <span id=”jstreet”></span><br>
        Phone: <span id=”jphone”></span><br>
    </p>
    <h2>Create Object from JSON String</h2>
    <p>First Name: <span id=”fname”></span> </p>
    <h2>从 JSON 字符串中创建对象</h2>
    <p>
        名: <span id=”firstname”></span><br>
        姓: <span id=”lastname”></span><br>
    </p>
    <script>
        var JSONObject = {
            “name”: “John Johnson”,
            “street”: “Oslo West 16”,
            “age”: 33,
            “phone”: “555 1234567”
        };
        document.getElementById(“jname”).innerHTML = JSONObject.name;
        document.getElementById(“jage”).innerHTML = JSONObject.age;
        document.getElementById(“jstreet”).innerHTML = JSONObject.street;
        document.getElementById(“jphone”).innerHTML = JSONObject.phone;
        var employees = [
            { “firstName”: “John”, “lastName”: “Doe” },
            { “firstName”: “Anna”, “lastName”: “Smith” },
            { “firstName”: “Peter”, “lastName”: “Jones” },];
        //因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
        //通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:
        employees[1].firstName = “Jonatan”;
        //可以像这样访问 JavaScript 对象数组中的第一项:
        document.getElementById(“fname”).innerHTML = employees[1].firstName;
        //创建包含 JSON 语法的 JavaScript 字符串:
        var txt = ‘{“students”:[‘ +
            ‘{“firstName”:”John”,”lastName”:”Doe” },’ +
            ‘{“firstName”:”Anna”,”lastName”:”Smith” },’ +
            ‘{“firstName”:”Peter”,”lastName”:”Jones” }]}’;
        //由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
        //eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
        var obj = eval(“(” + txt + “)”);
        document.getElementById(“firstname”).innerHTML = obj.students[1].firstName
        document.getElementById(“lastname”).innerHTML= obj.students[1].lastName
    </script>
</body>
</html>

一、JSON

JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。

实例:这个 employee 对象是包含 3 个员工记录(对象)的数组。
json 代码片段

{
    “employees”: [
        { “firstName”: “John”, “lastName”: “Doe” },
        { “firstName”: “Anna”, “lastName”: “Smith” },
        { “firstName”: “Peter”, “lastName”: “Jones” }
    ]
}

JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

与 XML 相同之处
JSON 是纯文本
JSON 具有”自我描述性”(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输

与 XML 不同之处
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
使用数组
不使用保留字

为什么使用 JSON?
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
使用 XML
读取 XML 文档
使用 XML DOM 来循环遍历文档
读取值并存储在变量中
使用 JSON
读取 JSON 字符串
用 eval() 处理 JSON 字符串

JSON 语法是 JavaScript 对象表示法语法的子集。
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组

JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
“firstName” : “John”
等价于这条 JavaScript 语句:
firstName = “John”

JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null

JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ “firstName”:”John” , “lastName”:”Doe” }
与这条 JavaScript 语句等价:
firstName = “John”
lastName = “Doe”

JSON 数组在方括号中书写:
数组可包含多个对象:
json 代码片段

{
    “employees”: [
        { “firstName”: “John”, “lastName”: “Doe” },
        { “firstName”: “Anna”, “lastName”: “Smith” },
        { “firstName”: “Peter”, “lastName”: “Jones” }
    ]
}

JSON 文件
JSON 文件的文件类型是 “.json”
JSON 文本的 MIME 类型是 “application/json”

JSON 使用
把 JSON 文本转换为 JavaScript 对象
JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

JSON 解析器
eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。
使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。
较新的浏览器和最新的 ECMAScript (JavaScript) 标准中均包含了原生的对 JSON 的支持。

二、JSONP

Jsonp(JSON with Padding) 是 json 的一种”使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。
同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。

jquery 使用 JSONP:
html 代码片段

<!DOCTYPE html>
<html>
<head>
    <title>JSONP 实例</title>
    <script src=”http://apps.bdimg.com/libs/jquery/1.8.3/jquery.js”></script>
</head>
<body>
    <div id=”divCustomers”></div>
    <script>
        $.getJSON(“http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?”, function (data) {
            var html = ‘<ul>’;
            for (var i = 0; i < data.length; i++) {
                html += ‘<li>’ + data[i] + ‘</li>’;
            }
            html += ‘</ul>’;
            $(‘#divCustomers’).html(html);
        });
    </script>
</body>
</html>

自己写过的例子:
javascript 代码片段

$.jsonp({
    type: ‘post’,
    url: ‘http://127.0.0.1:8080/lgPortal/common/addFeedback’,
    data:
        ‘account=’ +
        account +
        ‘&content=’ +
        textarea +
        ‘&typeId=’ +
        value +
        ‘&contact=’ +
        contact +
        ‘&key=’ +
        key,
    success: function(data) {},
})
function callback(data) {
    if (data.returnNo == ‘0’) {
        alert(‘提交成功’)
    } else {
        alert(data.returnInfo)
    }
}

jQuery使用jsonp的代码:
html 代码片段

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
    <title>Untitled Page</title>
    <script type=”text/javascript” src=jquery.min.js”></script>
    <script type=”text/javascript”>
        jQuery(document).ready(function () {
            $.ajax({
                type: “get”,
                async: false,
                url: “http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998”,
                dataType: “jsonp”,
                jsonp: “callback”,//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
                jsonpCallback: “flightHandler”,//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写”?”,jQuery会自动为你处理数据
                success: function (json) {
                    alert(‘您查询到航班信息:票价: ‘ + json.price + ‘ 元,余票: ‘ + json.tickets + ‘ 张。’);
                },
                error: function () {
                    alert(‘fail’);
                }
            });
        });
    </script>
</head>
<body>
</body>
</html>

Ajax 、getJson和JsonP区别:
Ajax -> 从服务器获取任何格式的资料
getJson -> 从服务器获取 JSON 格式的资料,算是特化的 ajax.
JsonP -> Ajax 和 Json 都是你主动获取资料, 服务器被动地提供资料. JsonP 倒过来, 由服务器主动执行你提供的函数以提供资料. 怀有恶意的 JsonP 的服务器可以注入常驻程序盗取你的当前页面的资料(包括密码栏)和 cookie, 甚至用当前用户的身分执行 ajax 指令.
说穿了, JsonP 就是由你主动邀请的 XSS 攻击, 不过这”攻击”一般都是注入正当数据而已.

1、ajax和jsonp这两种技术在调用方式上”看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;
2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。
3、所以说,其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。
4、还有就是,jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。

前端开开发所需要的语言 做前端开发所需要的浏览器 前端开发需要阅读的书籍

» 本文来自:前端开发者 » 《json和jsonP小结》
» 本文链接地址:https://www.rokub.com/5878.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 1

评论前必须登录!

 

  1. #1

    AAAA內容AAAA

    WANG2年前 (2018-10-12)