JSON+AJAX

学习路线:

  • W3C
  • HTML5
  • JavaScript
  • jQuary :JS框架
  • NodeJS/Python/C++/Golang/Node(前端)
  • MVVM框架:Vue/React/Webpack(前端)
  • DOM
    1. HTML DOM
    2. XML DOM
  • XML1.1
  • SOAP
  • WSDL
  • SVG
  • D3
  • PHP
  • JSON 、AJAX 绝配二人组 √
  • PHP、 正则表达式(前端)

JSON

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我终于写到JSON了,哭辽~ _ ~
JSON :JavaScript Object Notation(JavaScript 对象表示法),是一种轻量级的数据交换格式(与XML相比,更短,读写速度更快,是纯文本),独立于语言 (很多语言都可以解析json文本)。JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。文本可以被任何编程语言读取及作为数据格式传递。

//json
{
    "sites": [
        { "name":"菜鸟教程" , "url":"www.runoob.com" }, 
        { "name":"google" , "url":"www.google.com" }, 
        { "name":"微博" , "url":"www.weibo.com" }
    ]
}
//js创建对象数组
var sites = [
    { "name":"runoob" , "url":"www.runoob.com" }, 
    { "name":"google" , "url":"www.google.com" }, 
    { "name":"微博" , "url":"www.weibo.com" }
];

键的书写同样都需要引号,json中key必须是字符串,value是合法的json数据类型格式。

  1. JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
  2. JSON 语法规则 。数据为 键/值 对,键和值之间使用冒号。 数据由逗号分隔(对象之间,以及键值对之间)。 大括号保存对象, 方括号保存数组(对象数组),当没有多个对象时直接使用{},不再需要方括号。 总而言之,json定义对象数组,即包含一个或多个对象的数组。对象中还可以包括对象。
//对象包含对象实例,及访问
myObj = {
    "name":"runoob",
    "alexa":10000,
    "sites": {
        "site1":"www.runoob.com",
        "site2":"m.runoob.com",
        "site3":"c.runoob.com"
    }
}
x = myObj.sites.site1;
// 或者
x = myObj.sites["site1"];
  1. 可以使用 . 进行访问,即:对象[index].名称(当数组内为一个对象时,语法为:对象.键名称);还可以通过键名称进行访问,即:对象[“键”];可以通过下标、key进行赋值。删除为delete,即delete 对象.key,或对象[“key”] ,delete仅删除键值对,空间仍会保留。
//使用for/in循环访问
var myObj = { "name":"runoob", "alexa":10000, "site":null };
for (x in myObj) {
//此处只访问key
    document.getElementById("demo").innerHTML += x + "<br>";
}
//此处访问value
for (x in myObj) {
    document.getElementById("demo").innerHTML += myObj[x] + "<br>";
}
  1. JSON 值可以是:
    a、数字(整数或浮点数)
    b、字符串(在双引号中)
    c、逻辑值(true 或 false)
    d、数组(数组中可以包含undefined、function、date型数据)可以使用索引值进行访问(object.key[index]),可以循环访问数组中的每一个数据,数组内容必须写在中括号中,使用逗号隔开
    e、对象(在大括号中)
    f、null
    (不含有JS中的undefined、symbol、function、date,JSON 不能存储 Date 对象,需要存储 Date 对象,需要先将其转换为字符串,之后再将字符串转换为 Date 对象。JSON 不允许包含函数,但可以将函数作为字符串存储,之后再将字符串转换为函数。)
    键必须是字符串,使用引号包围。
    以下示例为一个对象中又包含对象,并且内层对象包含数组的情况:
myObj = {
    "name":"网站",
    "num":3,
    "sites": [
        { "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },
        { "name":"Runoob", "info":[ "菜鸟教程", "菜鸟工具", "菜鸟微信" ] },
        { "name":"Taobao", "info":[ "淘宝", "网购" ] }
    ]
}
for (i in myObj.sites) {
    x += "<h1>" + myObj.sites[i].name + "</h1>";
    for (j in myObj.sites[i].info) {
        x += myObj.sites[i].info[j] + "<br>";
    }
}
  1. parse和stringify方法为反向
方法描述
JSON.parse(text[, reviver])用于将一个 JSON 字符串转换为 JavaScript 对象,解析完成后就可以使用数据了。处理接收的服务器传来的数据时,方括号内为可选内容,是一个函数,用于将value格式进行转换
JSON.stringify(value[, replacer[, space]])用于将 JavaScript 值转换为 JSON 字符串。在向服务器发送数据时使用。会将时间转化为字符串,将函数键值对直接删除(可以先使用toString()方法将方法转化为字符串,再进行stringify)
eval()内建函数,eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误

一个eval的示例

var text = '{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}';
var obj = JSON.parse(text);
obj.alexa = eval("(" + obj.alexa + ")");//加()后函数本身不带有括号,还是原来的样子
 //在alexa 函数的最后加()转化为自调用函数
document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa();

AJAX

超级简单的AJAX来啦~

在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(传统网页如需更新内容,需要重载整个页面)AJAX 是一种用于创建快速动态网页的技术。

  1. 工作流程
    XMLHttpRequest 对象 (在后台异步的与服务器交换数据,实现更新部分网页内容的功能)
    JavaScript/DOM (信息显示/交互)
    CSS (给数据定义样式)
    XML (作为转换数据的格式)
    在这里插入图片描述
  2. 步骤一:创建XMLHttpRequest 对象
var xmlhttp;
if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
  1. 步骤二:向服务器发送请求
方法描述
open(method,url,async)规定请求的类型、URL 以及是否异步处理请求。method:请求的类型,GET 或 POST,post具有较强的健壮性,但get更简单更快。url:文件在服务器上的位置。async:true(异步)或 false(同步),推荐异步,极少量数据使用同步。
send(string)将请求发送到服务器。string:仅用于 POST 请求

语法:

xmlhttp.open("GET","ajax_info.txt",true);

xmlhttp.send();

示例:

//示例1
xmlhttp.open("GET","/try/ajax/demo_get.php",true);
xmlhttp.send();
//示例2
xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
xmlhttp.send();
//示例3
//向服务器发送信息
xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
xmlhttp.send();
//示例4
//将数据组装成表单形式发送,向请求添加HTTP头,header: 规定头的名称,value: 规定头的值
xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");
  1. 步骤三:获得服务器响应
    两种方式:responseText(获得字符串形式的响应数据)responseXML(获得 XML 形式的响应数据,需要特殊处理)
//XML文件处理方式
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

XML实例

<sites>
  <site>
    <name>菜鸟教程</name> <url>www.runoob.com</url>
  </site>
  <site>
    <name>google</name> <url>www.google.com</url>
  </site>
  <site>
    <name>微博</name> <url>www.weibo.com</url>
  </site>
</sites>
  1. 附加解释说明
    每当 readyState(存有 XMLHttpRequest 的状态信息,0: 请求未初始化;1: 服务器连接已建立; 2: 请求已接收;3: 请求处理中;4: 请求已完成,且响应已就绪)改变时,就会触发onreadystatechange 事件。status( 状态,200: “OK”;404: 未找到页面)为200时进行信息显示。onreadystatechange 事件会被触发 4 次(0 - 4), 分别是: 0-1、1-2、2-3、3-4,对应着 readyState 的每个变化。
    使用详情
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
}

7.回调函数(使用Java基础解释就是抽象函数)

//回调函数为loadXMLDoc
<script>
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
	if (window.XMLHttpRequest)
 	{
 		// IE7+, Firefox, Chrome, Opera, Safari 代码
 		 xmlhttp=new XMLHttpRequest();
 	 }
	else
	{// IE6, IE5 代码
 		 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.onreadystatechange=cfunc;
	xmlhttp.open("GET",url,true);
	xmlhttp.send();
}
function myFunction()
{
	 loadXMLDoc("/try/ajax/ajax_info.txt",function()
	 {
		  if (xmlhttp.readyState==4 && xmlhttp.status==200)
		  {
		        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
 		 }
 	});
}
</script>
  1. 最终示例

responseText版

function showCustomer(str)
{
  var xmlhttp;    
  if (str=="")
  {
    document.getElementById("txtHint").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest)
  {
    xmlhttp=new XMLHttpRequest();
  }
  else
  {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","/try/ajax/getcustomer.php?q="+str,true);
  xmlhttp.send();
}

reponsexml版

function loadXMLDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
    	myFunction(this);//此处this为xhttp 
    }
  };
  xhttp.open("GET", "cd_catalog.xml", true);
  xhttp.send();
}
function myFunction(xml) {
  var i;
  var xmlDoc = xml.responseXML;
  var table="<tr><th>Artist</th><th>Title</th></tr>";
  var x = xmlDoc.getElementsByTagName("CD");
  for (i = 0; i <x.length; i++) { 
    table += "<tr><td>" +
    x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +
    "</td><td>" +
    x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
    "</td></tr>";
  }
  document.getElementById("demo").innerHTML = table;
}

完结~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值