这是我参与「第五届青训营」伴学笔记创作活动的第9天
jsonp:
jsonp是json的一种“使用模式”,可以让网页从别的域名(网站)获取资料,即跨域读取数据。
因为同源策略所以当我们从不同的域访问数据时需要使用jsonp。同源策略是浏览器的安全功能。
jsonp的核心则是动态的添加
json:
json 是javascript对象表示法
json是轻量级的数据交换格式
json是独立于语音的
json具有自我描述性,更容易理解
json文本格式在语法上于创建JavaScript对象的代码是相同的,无需解释,JavaScript程序能够使用内建的eval()函数,用json数据生成原生的JavaScript对象。
json语法是JavaScript的对象表示法语法的子集
语法规则:
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
XML:
XML是可扩展标记语言。是一门语言。XML被设计用来传输和存储数据。
-
XML 指可扩展标记语言(EXtensible Markup Language)。
-
XML 是一种很像HTML的标记语言。
-
XML 的设计宗旨是传输数据,而不是显示数据。
-
XML 标签没有被预定义。您需要自行定义标签。
-
XML 被设计为具有自我描述性。
-
XML 是 W3C 的推荐标准。
JSON与XML相同之处:
- JSON 是纯文本
- JSON 具有"自我描述性"(人类可读)
- JSON 具有层级结构(值中存在值)
- JSON 可通过 JavaScript 进行解析
- JSON 数据可使用 AJAX 进行传输
与 XML 不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的 JavaScript eval() 方法进行解析
- 使用数组
- 不使用保留字
为什么使用 JSON?
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
使用 XML
- 读取 XML 文档
- 使用 XML DOM 来循环遍历文档
- 读取值并存储在变量中
使用 JSON
-
读取 JSON 字符串
-
用 eval() 处理 JSON 字符串
以下是学习实战代码:(访问时在浏览器输入locahost:8080即可看到8080默认页的情况,别的输入 localhost:8080/xxxx(为json1/xml/jsonp))
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type Article struct {
Title string //`json :"title"`
Desc string //`json :"desc"`
Content string //`json :"content"`
}
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(200, "zkdokd")
})
r.GET("/json1", func(c *gin.Context) {
c.JSON(200, map[string]interface{}{
"success": true,
"'msg": "你好Gin",
})
})
r.GET("/json2", func(c *gin.Context) {
c.JSON(200, gin.H{
"success": true,
"'msg": "你好Gin",
})
})
r.GET("/json3", func(c *gin.Context) {
a := &Article{
Title: "我是标题",
Content: "我是测试",
Desc: "我是描述",
}
c.JSON(200, a)
})
//http://localhost:8080/jsonp?callback=xxxx(格式 可以将xxxx传入页内)
//JSONP请求
r.GET("/jsonp", func(c *gin.Context) {
a := &Article{
Title: "我是标题-jsonp",
Content: "我是测试",
Desc: "我是描述",
}
c.JSONP(200, a)
})
r.GET("/xml", func(c *gin.Context) {
c.XML(http.StatusOK, gin.H{
"sunceeee": true,
"msg": "你好GIN 我是XML",
})
})
r.Run()
}