PHP json格式和js json格式 js跨域调用实现代码

下面是关于“PHP json格式和js json格式 js跨域调用实现代码”的攻略。

PHP与JSON格式

JSON格式介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,主要用于前后端数据交互。JSON格式由键值对组成,数据之间用逗号分隔,键值对之间用冒号分隔。JSON格式支持数组和嵌套对象的格式,数据类型包括字符串、数字、布尔值、数组和对象。

以下是一个JSON格式的例子:

{
  "name": "张三",
  "age": 25,
  "hobby": ["篮球","游泳"],
  "address": {
    "province": "广东省",
    "city": "深圳市",
    "district": "南山区"
  }
}

PHP通过JSON格式传递数据

在PHP中,可以通过使用json_encode将数组转换成JSON格式数据,使用json_decode将JSON格式数据转换成数组。

例如,将PHP数组转换为JSON格式:

$data = array(
  "name" => "张三",
  "age" => 25
);

$json_data = json_encode($data);

将JSON格式数据转换为PHP数组:

$json_str = '{"name":"张三","age":25}';
$data = json_decode($json_str, true);

其中,json_decode函数的第二个参数为true时,表示将JSON数据转换为数组而不是对象。

JS与JSON格式

JSON格式介绍

同上。

JS通过JSON格式传递数据

在JS中,可以使用JSON对象的方法,将JS对象(数组也是一种对象)转换成JSON格式数据,也可以将JSON格式数据转换成JS对象。

例如,将JS对象转换为JSON格式:

var data = {
  name: "张三",
  age: 25
};

var json_data = JSON.stringify(data);

将JSON格式数据转换为JS对象:

var json_str = '{"name":"张三","age":25}';
var data = JSON.parse(json_str);

其中,JSON.parse方法将JSON格式数据转换为JS对象,JSON.stringify方法将JS对象转换为JSON格式数据。

JS跨域调用

同源限制

同源是指协议、主机名和端口号都相同的两个URL,同源限制是浏览器对JS发出跨域请求的安全限制策略。在非同源的情况下,浏览器会拒绝跨域请求。

JSONP跨域调用

为了解决JS跨域调用的问题,可以使用JSONP技术,JSONP(JSON with Padding)是一种非官方的跨域调用方式。它利用script标签的src属性不受同源限制的特性,将需要请求的数据通过JSON格式包装后,作为回调函数的参数动态插入到script标签的src属性中,然后通过回调函数处理返回的数据。

以下是一个JSONP的例子:

<script>
  function showData(data) {
    console.log(data);
  }
</script>

<script src="http://www.example.com/data.php?callback=showData"></script>

其中,data.php文件会返回一个将数据包装成JSON格式的JavaScript语句,并在最外层包裹一个回调函数调用,如下:

showData({"name":"张三","age":25});

CORS跨域调用

CORS(Cross-Origin Resource Sharing)跨域资源共享是W3C标准的一种跨域通信机制。它通过响应头中的Access-Control-Allow-Origin字段,来告知浏览器哪些网站可以访问资源,从而达到解决JS跨域的问题。

在服务端,需要设置响应头,例如PHP设置响应头的代码如下:

header('Access-Control-Allow-Origin: http://www.example.com');

在JS中,可以使用XMLHttpRequest对象访问跨域资源(需要浏览器支持CORS),代码如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.example.com/data.php', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

示例说明

示例1

PHP将数组转换为JSON格式,JS通过JSONP跨域调用获取数据。

PHP代码(data.php):

<?php
header('Content-type: application/javascript');
$data = array(
  "name" => "张三",
  "age" => 25
);
$json_data = json_encode($data);
echo $_GET['callback'] . '(' . $json_data . ')';
?>

JS代码:

<script>
  function showData(data) {
    console.log(data);
  }
</script>

<script src="http://www.example.com/data.php?callback=showData"></script>

在浏览器中运行JS代码,可以看到控制台输出:

Object {name: "张三", age: 25}

示例2

JS通过XMLHttpRequest对象访问跨域资源。

PHP代码(data.php):

<?php
header('Access-Control-Allow-Origin: http://www.example.com');
$data = array(
  "name" => "张三",
  "age" => 25
);
$json_data = json_encode($data);
echo $json_data;
?>

JS代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.example.com/data.php', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

在浏览器中运行JS代码,可以看到控制台输出:

{"name":"张三","age":25}

以上是关于“PHP json格式和js json格式 js跨域调用实现代码”的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP json格式和js json格式 js跨域调用实现代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 使用layui实现的左侧菜单栏以及动态操作tab项方法

    好的。使用layui实现左侧菜单栏和动态操作tab项是一个比较常见的需求,以下是实现的详细攻略。 实现左侧菜单栏 使用tree组件渲染菜单 LayUI提供了tree组件用于展示菜单栏,我们可以使用tree组件来渲染左侧菜单。 <div class="layui-col-md3"> <div class="lay…

    JavaScript 2023年6月10日
    00
  • 如何自己实现JavaScript的new操作符

    下面就是如何自己实现JavaScript的new操作符的攻略。 什么是new操作符 在JavaScript中,new操作符用于创建一个实例对象,它接收一个函数作为参数,并调用该函数构造一个新的实例对象。基本语法如下: var instance = new Constructor(); 其中Constructor是要被实例化的函数,在该函数内部使用了this关…

    JavaScript 2023年6月10日
    00
  • JavaScript 删除或抽取字符串指定字符的方法(极为常用)

    对于JavaScript删除或抽取字符串指定字符的方法,我们可以使用以下三种方式实现: 方法一:使用replace() 使用replace方法可以将字符串中指定的字符替换为指定的字符(或者为空字符),从而达到删除或抽取的效果。用法如下所示: str.replace(要替换的字符, 替换为的字符); 其中,要替换的字符可以是一个普通字符,也可以是一个正则表达式…

    JavaScript 2023年5月28日
    00
  • 浅析script标签中的defer与async属性

    当我们在HTML文档中使用<script>标签引入JavaScript文件时,我们可以为这个标签添加两个重要的属性:defer和async。这两个属性都是为了优化JavaScript的加载和执行,但它们有一些不同之处。下面我们来分别对这两个属性进行详细的解析。 Defer属性 defer属性告诉浏览器,这个脚本将被延迟到页面加载完成后再执行。这意…

    JavaScript 2023年6月10日
    00
  • JavaScript Length 属性的总结

    我们来讲解一下JavaScript Length 属性的总结。 什么是JavaScript Length属性 在JavaScript中,Length属性是Array对象的一个属性,用来返回该数组的元素个数。当Length属性被调用时,它的返回值是一个表示数组中元素个数的数字。 JavaScript Length属性的使用方法 可以使用以下语法来获得数组的长度…

    JavaScript 2023年5月28日
    00
  • JavaScript实现横线提示输入验证码随输入验证码输入消失的方法

    要实现这个功能,我们需要用到JavaScript和CSS。 首先,我们需要在HTML页面中添加一个input标签来接受验证码输入,同时在输入框下面添加一个div标签来显示横线提示。例如: <label for="code">请输入验证码:</label> <input type="text&quot…

    JavaScript 2023年6月10日
    00
  • JavaScript运动函数实例详解

    JavaScript运动函数实例详解 运动函数是实现网页动画效果的必备工具之一,JavaScript中有多种运动函数实现方式,其中以JavaScript的定时器方式实现最为常见。本文将详细讲解使用JavaScript定时器实现运动函数的方法,同时给出两个示例说明。 定时器 JavaScript中用于实现定时器的函数是setInterval()和setTime…

    JavaScript 2023年5月27日
    00
  • 深入理解Node.js中的Worker线程

    深入理解Node.js中的Worker线程 Node.js中的Worker线程是用于在主线程外进行计算的工作线程。使用Worker线程可以避免应用程序被I/O阻塞,提高应用程序的响应能力。下面我们将介绍如何使用Worker线程来实现并行计算和I/O密集型任务。 创建Worker线程 创建Worker线程需要使用Node.js的内置模块worker_threa…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部