微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JS跨域交互(jQuery+php)之jsonp使用心得

什么是jsonp?

说到jsonp,你可能最先想到JSON;它还真和JSON有关系;

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的

效果:在页面尾部增加一条线,以及:getScript ok! ,后面紧跟被调用端返回的它接收到的请求地址:

rush:js;"> getScript ok!/test2.PHP?_=1467261287339

后面为什么会多了个“?_=1467261287339”呢?

这是防止浏览器从缓存去加载这个URL地址内容的!由jQuery自动添加

调用端,也可以说是服务端

服务端后台语言是PHP,通过Nginx代理的,端口为:80,所以访问地址是:PHP">http://localhost/test2.PHP

test2.PHP 文件内容

rush:PHP;"> PHP echo "var reqUrl = \"" . $_SERVER["REQUEST_URI"] . "\";"; echo "fncallback({\"reqUrl\": reqUrl });";

浏览器访问:

通过浏览器访问,自然没有后面的参数,除非你自己手动加上

跨域交互二:jQuery.getJSON

调用端:

rush:js;">

注意:我在请求的地址中添加了“?callback=?”,这是做什么用的呢?

目的是让jQuery为我自动生成一个回调函数名称,并将我注册的匿名回调函数映射到这个“自动生成的回调函数名称”上; 有点绕,我们来看看服务端返回的它收到的请求地址就明白了:

rush:js;"> getJSON ok!/test.PHP?callback=jQuery1102031468501139651384_1467262280037&_=1467262280038

看到callback后面跟了参数值了吧,这就是jQuery自动生成的;再看服务端代码

服务端

rush:js;"> PHP echo "var reqUrl = \"" . $_SERVER["REQUEST_URI"] . "\";"; echo $_GET["callback"] . "({\"reqUrl\": reqUrl });";

通过 $_GET["callback"] 获取客户端传递过来的回调函数名称;看输出

rush:js;"> var reqUrl = "/test.PHP?callback=jQuery1102019717387174726153_1467262461959&_=1467262461960"; jQuery1102019717387174726153_1467262461959({"reqUrl": reqUrl });

跨域交互三:jQuery.ajax

调用端:

rush:js;">

注意:在请求的地址中不需要添加“?callback=?”,但我们使用“dataType: 'jsonp',”;

服务端

这个例子的服务端和上个是完全一样的!

使用总结

使用 getScript 的方式,你可以自己定义一个回调函数名称,让服务端响应的时候使用你指定的回调函数名称

使用 getJSON 的方式关键在于URL后面添加的“callback=?”;

使用 ajax 的方式关键在于参数中的数据类型设置“dataType: 'jsonp',”;

以上所述是小编给大家介绍的JS跨域交互(jQuery+PHP)之jsonp使用心得。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jQuery表单验证提交:前台验证一(图文+视频)
jQuery表单验证提交:前台验证二(图文+视频)
jQuery如何实时监听获取input输入框的值
JQuery怎么判断元素是否存在
jQuery如何实现定时重定向
jquery如何获取复选框选中的值
jQuery如何清空form表单数据
jQuery怎么删除元素节点
JQuery怎么循环输出数组元素
jquery怎么实现点击刷新当前页面