百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

json和jsonp区别_json和geojson

qiyuwang 2025-02-18 13:06 12 浏览 0 评论

JSON和JSONP虽然只有一个字母的差别, 但其实他们根本不是一回事儿:

JSON是一种数据交换格式, 而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式, 一个是信息传递的约定方法。

一、JSON对象概述

1、什么是JSON

JSON是一组无序数据的集合, 这个集合是无序属性的集合, 这个集合可以使用键值对进行表述。在内存中表现为一段连续内存的集合。

2、JSON的定义

在Javascript中, JSON的定义非常简单, 只需要一对花括号即可表示。

基本语法:

var json对象 = {属性:属性值,属性:属性的值…}

特别注意:

在json对象中, 其属性可以没有任何符号, 也可以通过单引号或双引号括起来。

var person = {name:'xiaomei', age:18, email:'xm@itcast.cn'};
var person = {'name':'xiaomei', 'age':18, 'email':'xm@itcast.cn'};
var person = {"name":'xiaomei', "age":18, "email":'xm@itcast.cn'};

以上代码也可以改写成如下形式:(代码一致, 结构不同)

var person = {
name:'xiaomei',
age:18,
email:'xm@itcast.cn'
};

3、探究JSON是何种数据类型

var person = {
name:'xiaomei',
age:18,
email:'xm@itcast.cn'
};
alert(typeof person); //object

弹出结果:object, 所以由此可知:JSON也是对象的一种, 我们可以称之为"JSON对象"。

4、JSON对象的访问

在Javascript中, 访问对象属性是通过点号.来完成的。如Math.random(), new Date().getTime()

var person = {
name:'xiaomei',
age:18,
email:'xm@itcast.cn'
};
alert(person.name);
alert(person.age);
alert(person.email);

5、使用JSON保存大批量数据

在实际项目开发中, 我们通常借助数组+JSON来保存大批量数据, 格式如下:

var json对象 = [{属性:属性值},{属性:属性值},{属性:属性值}];

示例代码:使用JSON对象来保存多个人的信息

var person = [{name:"刘备", age:43, email:"liubei@itcast.cn"}, {name:"关羽", age:42, email:"guanyu@itcast.cn"},
{name:"张飞", age:41, email:"zhangfei@itcast.cn"}];

① 使用索引+对象属性的形式访问某个人的信息(如关羽)

alert(person[1].name);
alert(person[1].age);
alert(person[1).email);

② 使用for或for...in循环遍历输出所有信息

for(var i=0;i");
document.write(person[i].age+"
"); document.write(person[i].email+"
"); } for(var i in person){ document.write(person[i].name+"
"); document.write(person[i].age+"
"); document.write(person[i].email+"
"); }

6、使用PHP生成与解析JSON数据

json_encode:把一个数组或对象转化生成JSON格式的数据(字符串)

json_decode($json,$flag):把一个JSON字符串转化生成数组或对象

参数说明:

$json :json格式的字符串

$flag :布尔类型值, 可以是true或false, true代表返回数组, false代表返回对象, 默认为false。

特别说明:

json_encode在转换数组到JSON字符串时要特别注意

① 如果这个数组是索引型数组, 其会自动转化为JS数组格式的字符串

② 如果这个数组是关联型数组, 其会自动转化为JS中JSON格式的字符串

示例代码:使用json_encode把一个一维数组转换为JSON字符串

关联数组

"Linux", "server"=>"Apache", "db"=>"MySQL", "lan"=>"PHP");
echo json_encode($lamp);
?>

输出结果:{"os":"Linux","server":"Apache","db":"MySQL","lan":"PHP"}

索引数组

输出结果:["Linux","Apache","MySQL","PHP"]

混合数组:

"MySQL", "lan"=>"PHP");
echo json_encode($lamp);
?>

输出结果:{"0":"Linux","1":"Apache","db":"MySQL","lan":"PHP"}

示例代码:使用json_encode把一个二维数组转化为JSON字符串

'刘备', 'age'=>43, 'email'=>'liubei@itcast.cn'),
array('name'=>'关羽', 'age'=>42, 'email'=>'guanyu@itcast.cn'),
array('name'=>'张飞', 'age'=>41, 'email'=>'zhangfei@itcast.cn')
);
echo json_encode($persons);
?>

输出结果:[{"name":"\u5218\u5907","age":43,"email":"liubei@itcast.cn"},{"name":"\u5173\u7fbd","age":42,"email":"guanyu@itcast.cn"},{"name":"\u5f20\u98de","age":41,"email":"zhangfei@itcast.cn"}]

示例代码:使用json_encode把一个对象转化为JSON字符串

name = 'xiaomei';
$std->age = 18;
$std->email = "xiaomei@itcast.cn";
echo json_encode($std);
?>

输出结果:{"name":"xiaomei","age":18,"email":"xiaomei@itcast.cn"}

7、使用Ajax+JSON实现两个数的四则运算

要用到的知识点:eval方法可以把一个字符串当做Javascript脚本处理, 语法如下:

alert(eval("3+5")); //8

但是要特别注意:如果eval方法处理带有{}花括号格式的数据时,必须使用两层圆括号,谨记!!!

案例:使用Ajax+JSON实现两个数的四则运算




求两个数的四则运算




第一个数:

第二个数:
$jia, 'jian'=>$jian, 'cheng'=>$cheng, 'chu'=>$chu ); //使用json_encode把数组转化为json字符串 echo json_encode($data); ?>

使用Ajax+JSON实现两个数的四则运算




分类联动效果








二、JSONP技术

1 Ajax技术由于受到浏览器的限制, 该方法不允许跨域通信。

同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。

也就是说, 受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容, 以防止它们之间的操作。

2 跨域请求的解决与意义

在实际项目开发中, 经常会碰到跨域请求问题, 所以必须要解决。

① 模拟场景一:公司同时可能具有多个系统(OA系统、ERP系统、官方网站)


由于受到同源策略的影响, Ajax不允许从itcast.cn域名向oa.com域名发送请求。

② 模拟场景二:手机app软件、官方的网站提供数据接口api.php

手机:wifi/2G/3G/4G网络, 生成的url地址也都不是固定的 http://192.168.2.8/

Ajax技术

由于受到同源策略的影响, Ajax不允许从http://192.168.2.8/域名向itcast.cn域名发送请求。

3 原生代码解决跨域问题

解决跨域思路:在Javascript中, 虽然Ajax不允许直接跨域, 但是有一个标签script, 使用src属性, 其是可以正常跨域的


}

demo.php

4 使用jsonp技术+json实现大批量数据的编辑




网页标题









demo.php

jQuery中的JSONP技术

$.ajax

$.get

$.getJSON

由此可知, 无论任何框架, 其解决跨域请求都是通过底层的get方式实现的。

① 使用$.ajax解决跨域问题









②使用$.get解决跨域问题









③ 使用$.getJSON解决跨域问题









相关推荐

centos7使用yum安装nginx+php7+mysql5.6

本文主要介绍安装在centos7下如何安装nginx+php+mysql的环境,centos7的版本自带安装源的版本无法实现PHP5.4以上的版本,数据库默认用的是mariadb,文章介绍的安装是如何...

Linux基础入门(VMWare中CentOS7配置yum)

上一章节,介绍了《Linux基础入门(CentOS7下通过命令行配置网络)》,本章将介绍如何配置yum源,方便后续在学习和使用的过程中,对所需工具的安装;...

CentOS 7搭建Nextcloud私有云(centos搭建云盘)

Nextcloud简介:对于私人网盘,其中最出名的就是seafile、owncloud和nextcloud。seafile是国人开发的,有免费和企业版,免费的功能有限;nextcloud是owncl...

分享一个docker镜像源地址,解决docker不能拉取的问题

自己搭建的代理,centos7只需要修改/etc/docker/daemon.json并输入以下内容:{"registry-mirrors":["https://next...

源支付5.18版全套开源源码客户端+云端+监控+协议三网免挂免输入

源支付5.18最新版协议去授权全套三端开源源码_客户端+云端+监控+协议三网免挂免输入(全套版)推荐系统为:CentOS7.6Linux系统环境:Nginx1.20.1+MySQL5.6....

centos7飞速搭建zabbix5.0并添加windows、linux监控

一、环境zabbix所在服务器系统为centos7,监控的服务器为windows2016和centos7。二、安装zabbix官方安装帮助页面...

CentOS上配置 Docker 使用代理服务器

hub.docker最近总被墙,国内大厂搞的docker镜像源代理被封被停,对于一个严重依赖一些海外项目的软件开发人员,简直没法干活了。docker要在CentOS上配置Docker使用代理服...

CentOS 7 (阿里云虚拟机) 安装 Docker

一、安装Docker1.使用root权限登录CentOS。确保yum包更新到最新sudoyumupdate...

Centos离线静默安装 oracle11g,步骤细验证成功

一、环境要求1.1.涉及工具及环境1)CentOS764位系统2)oracle安装包文件a)linux.x64_11gR2_database_1of2.zip...

Linux运维之制作指定软件包的YUM源

#挑战30天在头条写日记#关注我,不迷路,大家好,我是大王。--记录运维中遇到的故障及排查方法...

在CentOS 9 安装Nvidia显卡驱动详细操作步骤

今天给粉丝网友演示CentOS9系统下如何安装nvidia显卡驱动。·将下载好的显卡驱动放到文件夹中,这里以download为例,放入文件夹中开始对系统软件升级,是为了防止在安装显卡驱动时显示报错...

基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)

前言:由于公司业务服务器大部分都在内网环境下运行,内网环境无法直接使用yum安装升级更新软件,所以需要自建Yum源来满足目前日常工作需要。...

最新zabbix一键安装脚本(基于centos8)

一、环境准备注意:操作系统必须是centos8及以上的,因为我配的安装源是centos8的。并且必须连接互联网,脚本是基于yum安装的!!!...

CentOS7中使用yum安装Nginx的方法

1、添加源  默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源(...

Centos8出现Failed to download metadata for repo 'AppStream'解决

大家都知道Centos8于2021年年底停止了服务,大家再在使用yum源安装时候,出现下面错误“错误:Failedtodownloadmetadataforrepo'AppStre...

取消回复欢迎 发表评论: