简单地使用json并不能支持跨域资源请求,为了解决这个问题,需要采用jsonp数据交互协议。众所周知,js文件的调用不受跨域与否的限制,因此如果想通过纯web端跨域访问数据,只能在远程服务器上设法将json数据封装进js格式的文件中,供客户端调用和进一步处理,这就是jsonp协议的原理。

JSON 和 JSONP

JSONP是一种发送JSON数据的方法,无需担心跨域问题。JSONP不使用该XMLHttpRequest对象。JSONP使用

由于跨域策略,从另一个域请求文件可能会导致问题。从另一个域请求外部脚本没有此问题。JSONP使用此优势,并使用脚本标记而不是XMLHttpRequest对象请求文件。

服务器文件

服务器上的文件将结果包装在函数调用中:<?php

$myJSON = '{"name":"John", "age":30, "city":"New York"}';

echo "myFunc(".$myJSON.");";

?>

结果返回对名为“myFunc”的函数的调用,并将JSON数据作为参数。确保客户端上存在该功能。

JavaScript函数

名为“myFunc”的函数位于客户端,并准备处理JSON数据:function myFunc(myObj) {

document.getElementById("demo").innerHTML = myObj.name;

}

xmlhttp.send("x=" + dbParam);

创建动态script标记

根据您放置脚本标记的位置,上面的示例将在页面加载时执行“myFunc”函数,这不是很令人满意。只应在需要时创建script标记:

单击按钮时创建并插入

var s = document.createElement("script");

s.src = "demo_jsonp.php";

document.body.appendChild(s);

}

动态JSONP结果

上面的例子仍然是非常静态的。通过将JSON发送到php文件使示例动态化,并让php文件根据获取的信息返回JSON对象。

PHP文件<?phpheader("Content-Type: application/json; charset=UTF-8");

$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");

$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);

$outp = array();

$outp = $result->fetch_all(MYSQLI_ASSOC);echo "myFunc(".json_encode($outp).")";

?>

PHP文件解释:

使用PHP函数json_decode()将请求转换为对象 。

访问数据库,并使用请求的数据填充数组。

将数组添加到对象。

使用json_encode()函数将数组转换为JSON 。

在返回对象周围包裹“myFunc()”

JavaScript示例:function clickButton() {

var obj, s

obj = { table: "products", limit: 10 };

s = document.createElement("script");

s.src = "jsonp_demo_db.php?x=" + JSON.stringify(obj);

document.body.appendChild(s);

}

function myFunc(myObj) { var x, txt = ""; for (x in myObj) {

txt += myObj[x].name + "

";

}

document.getElementById("demo").innerHTML = txt;

}

回调函数

当您无法控制服务器文件时,如何让服务器文件调用正确的函数?有时服务器文件提供回调函数作为参数:

php文件将调用您传递的函数作为回调参数:

PHP文件:<?php

$callback = trim($_GET('callback'));

$myJSON = '{ "name":"John", "age":30, "city":"New York" }';

echo $callback."(".$myJSON.");";

?>

javascript :function clickButton() {

var s = document.createElement("script");

s.src = "jsonp_demo_db.php?callback=myDisplayFunction";

document.body.appendChild(s);

}

以上就是JavaScript中的JSON和JSONP的详细内容,更多请关注html中文网其它相关文章!

jsonp请求html页面,JavaScript中的JSON和JSONP相关推荐

  1. JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解

    JS/JavaScript中解析JSON --- JSON.parse().JSON.stringify()以及$.parseJSON()使用详解 现在JSON格式在web开发中非常重要,特别是在使用 ...

  2. 在JavaScript中解析JSON? [重复]

    本文翻译自:Parse JSON in JavaScript? [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : ...

  3. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript ...

  4. 在 JavaScript 中创建 JSON 对象

    <html> <body> <h2>在 JavaScript 中创建 JSON 对象</h2><p> Name: <span id=& ...

  5. javascript 中使用JSON

    因为JSON 是 javascript 的一个子集,所以,在javascript 中使用JSON是非常简单的. js 代码 var myJSONObject = {"bindings&quo ...

  6. JSON—JavaScript中的JSON

    JSON的数据格式 JavaScript中的JSON 1.JavaScript与JSON JSON是一种语法,用来序列化对象.数组.数值.字符串.布尔值 null.他基于JavaScript语法,但与 ...

  7. js判断json有没有某值_JS中判断JSON数据是否存在某字段的方法 JavaScript中判断json中是否有某个字段...

    方式一 !("key" in obj) 方式二 obj.hasOwnProperty("key")  //obj为json对象. 实例: var jsonwor ...

  8. JavaScript中的JSON

    JSON是什么? JSON格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式.就是符合某种规范的文本格式,经常用于与服务器做数据交换,比传统的XML更简洁 ...

  9. 服务器json文件怎么创建对象,JavaScript中对JSON对象的基本操作示例

    JSON对象 1.对象的属性:对象的属性是有键值对组成的,其中key为一个字符串,value可以为任何的Javascript对象. //使用[]设置和获取对象的属性 var obj = new Obj ...

最新文章

  1. swift 数组高阶使用(一)
  2. 谈题库系统(Samplx)项目之进展
  3. HCNA之网络基础【以太网帧结构】
  4. Git新建临时分支进行开发后合并至master
  5. iOS开发小技巧--高斯模糊框架的应用
  6. 【Pytorch神经网络理论篇】 08 Softmax函数(处理分类问题)
  7. linux必备工具,Linux装机必备工具
  8. Qt creator5.7 OpenCV249之均值滤波(含源码下载)
  9. 让Linux使用malloc申请更多的内存
  10. MFC实现BCB中的ProcessMessages
  11. C#入门详解(10)
  12. 模拟信号的数字处理方法
  13. Linux驱动模块Makefile编写
  14. Python env
  15. 天猫精灵服务器修改密码,天猫精灵怎么解绑 天猫精灵解绑账号方法
  16. 傻瓜式教学——手把手教你电脑三种方式连接打印机
  17. box-shadow四个边框设置阴影样式
  18. 微信朋友圈装x代码_朋友圈生成器有哪些_微信朋友圈生成器大全_微信朋友圈装逼生成器下载_飞翔软件专题...
  19. Houdini `@pdg_output`找不到文件
  20. MongoDB:高可用基础-副本集原理

热门文章

  1. Linux内存背后的那些神秘往事
  2. php数组无限文类,php把无限级分类生成数组的类
  3. Salesforce宣布5.82亿美元收购文件编辑公司Quip
  4. javascript OOP(下)(九)
  5. mongoDB 使用手册
  6. 使用PHP建立SVN的远程钩子,使用exec命令自动更新SVN的代码
  7. iredmail邮件服务器之修改默认的web服务端口号
  8. dotConnect for Oracle控件免费下载及使用方法
  9. 解决wordpress无法离线发布(远程发布)的故障
  10. 阿里巴巴右侧6滑块VS雅虎右侧6滑块VS自定义6滑块