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

yizhihongxing

下面是关于“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日

相关文章

  • JavaScript中reduce()方法的使用详解

    JavaScript中reduce()方法的使用详解 1. 什么是reduce()方法 reduce()是JavaScript中的高阶函数,用于对数组中的所有元素进行迭代,并将它们缩减为单个值。它接受一个回调函数作为参数,该回调函数执行一个累加器和当前元素之间的操作,将最终结果返回。 reduce()方法的语法如下: arr.reduce(callback[…

    JavaScript 2023年5月27日
    00
  • js多线程解决方案Web Worker简单说明与实例演示

    Web Worker是一个可以让JavaScript在浏览器上跑多个进程的方案,它可以让JavaScript不阻塞UI线程,大大提高网页的性能和用户体验。Web Worker是HTML5标准里的一部分,目前主流的现代浏览器都支持Web Worker。 Web Worker的基础知识 什么是Web Worker? Web Worker是一种JavaScript…

    JavaScript 2023年5月28日
    00
  • js中数组插入、删除元素操作的方法

    针对“js中数组插入、删除元素操作的方法”的完整攻略,我给您详细讲一下: 一、数组插入元素 1. push()方法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。 示例代码如下: let fruits = [‘apple’, ‘banana’, ‘orange’]; fruits.push(‘strawberry’); // 向数组末尾…

    JavaScript 2023年5月27日
    00
  • JS 操作Array数组的方法及属性实例解析

    JS 操作Array数组的方法及属性实例解析 在JavaScript中,数组(Array)是一种非常常见的数据结构,它能够存储多个值,并且可以动态地添加、删除、修改元素。本文将详细讲解JavaScript中操作Array数组的方法及属性。 创建数组 在JavaScript中,可以使用[]或new Array()两种语法创建一个数组。其中,[]更为常见。 //…

    JavaScript 2023年5月27日
    00
  • jQuery学习3:操作元素属性和特性

    《jQuery学习3:操作元素属性和特性》是一篇介绍如何使用jQuery操作HTML元素的属性和特性的教程。该教程的学习内容主要分为以下几个方面: 获取/设置属性和特性 当我们需要获取或设置一个元素的属性或特性时,可以通过jQuery中的attr方法实现。attr方法的用法如下: // 获取一个元素的属性或特性 var value = $(‘selector…

    JavaScript 2023年6月10日
    00
  • 详谈js的变量提升以及使用方法

    当JavaScript执行代码时,会在执行前将变量和函数定义提升到当前作用域的顶部。这个过程就叫做变量提升。变量提升可以让我们在变量或函数定义之前使用它们,但需要注意它们的赋值不会提升。 变量提升 JavaScript 中变量提升为以下代码表现: console.log(myVar); // 输出 undefined var myVar = "He…

    JavaScript 2023年6月10日
    00
  • JavaScript cookie的设置获取删除详解

    我可以为您详细讲解“JavaScript cookie的设置、获取、删除详解”的攻略。 什么是Cookie 在介绍Cookie设置、获取和删除之前,我们先来了解一下什么是Cookie。 Cookie,也称为Web Cookie或浏览器Cookie,指网站为了辨别用户身份,存储在用户本地终端(通常是浏览器)上的数据(通常经过加密)。 Cookie的组成 一个典…

    JavaScript 2023年6月11日
    00
  • javascript动画之圆形运动,环绕鼠标运动作小球

    JavaScript动画之圆形运动 在JavaScript中,通过使用CSS3的transform属性或canvas绘图API,可以实现圆形运动效果。接下来,我们以transform属性为例进行详细讲解。 示例1:物体沿圆形路径运动 首先,需要准备一个容器和一个要运动的物体。将其设置为圆形,如下所示: <div id="container&q…

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