JSONP和批量操作功能的实现方法


Posted in Javascript onAugust 21, 2016

推荐一个好用的在线 Markdown 编辑器,比我自己用 Python 编译成 markdown 要方便多了。

[http://mahua.jser.me]

markdown简明语法教程

[http://www.appinn.com/markdown/]

好东西会让人免费为其推广,希望我自己也能做出几个有用的小工具。

一、JSONP的使用

jsonp,是一种数据格式,用来解决跨域问题。

比如,在 admin.chugang.net 需要一个二维码,而在 www.chugang.net 中已经存在生成二维码的功能。当然可以将www.chugang.net中生成

二维码的代码复制一套到 admin.chugang.net 中。但这造成了代码的重复,此种解决方案,是不被提倡的。于是,我采用 www.chugang.net
提供API供 admin.chugang.net 调用的方案。

admin.chugang.net 使用JS调用 www.chugang.net 的接口,遇到了跨域问题。普通的ajax请求
代码,如下:

$.ajax({
type : "post",
url : 'http://www.chugang.net/api',
dataType : 'json',
data : {'id' : 5, 'type' : 3},
beforeSend : function(){},
success : function(returnMsg){
//
},
error : function(){
} 
});

在使用过程中,若使用的是firefox,firebug插件会提示不能跨域请求。

听别人说过JSONP能解决跨域调用问题,但一直没有遇到过跨域场景,也没有使用过。直到在折腾自己的博客的过程中,因为博客代码的路由功能不完善,导致我使用异步请求输出数据的时候,遭遇跨域问题。直接搜索“JSONP",对照相关资料,解决了问题。具体代码,我仍然不能
写出,如果需要我再解决相同的问题,我仍然需要查找demo,然后copy过来修改。但我记得,关键词是

$.getJSON

它是用来读取数据的。

前些天,在工作中,遇到类似问题,正好温习一下JSONP。不过,该场景下,并不是读取数据,而是写数据的。网上找来的demo是这样的:

$.ajax({
type : 'post',
url : 'http://www.chugang.net/api',
dataType : 'jsonp',
data : {'username' : 'cg', 'action' : 'add'},
beforeSend: function(){},
success : function(returnMsg){
if(returnMsg.success){ //注意,此处,与普通ajax请求并无差异
//do something
}else{
//do anthorthing
}
},
error : function(){
}
});

这是客户端的,服务端的代码是这样的:

$callBack = isset($_GET['callBack'])?$_GET['callBack']:'';
$returnMsg = [
'code' : 1000,
'success' : true,
'message' : 'Nothing is difficult if you put your heart into it!',
];
$json = json_encode($returnMsg);
echo $classBack . '(' . $json. ')';

记得不准确,不能保证上述代码的正确性,但关键点都写出来了。客户端代码,可能遗漏点多一些。

上面的场景,除了使用JSONP来解决跨域,还有另一种方案。

在 admin.chugang.net 写一个接口,在此接口中调用 www.chugang.net 提供的接口,然后再用普通的ajax请求
来调用 admin.chugang.net 中提供的接口。这样就可以避免跨域。

此种方案,引申出一个问题。刚遇到ajax调用接口跨域的时候,我很疑惑:之前我曾大量调用其他不同域名站点的接口,为啥就没有遇到跨域问题呢?稍微想想,知道了原因:之前的调用接口,是使用curl等方式,而不是JS;JS中才存在跨域。

提到跨域,工作中遇到过字体跨域的问题,需要配置nginx服务器。根据浏览器的跨域提示,一搜索就能得到大量雷同的解决方案,然而,这些方案并不起作用。后来仍然是通过检索,获得了有效的方案。具体配置代码,我不记得了,它的作用是,对需要跨域的文件(比如字体),不
光要配置跨域,还要设置这些文件所在的目录。nginx的站点目录,并不是这些跨域文件的目录。

十分佩服解决那个问题的网络大神,他根据日志,大胆假设尝试求证,解决问题。不像我,只能搜索现成的方案。

回头把解决字体跨域的代码补充到这篇文章。

不仅如此,关于jsonp的知识点,也要补充并且修正错误内容。博客不仅要起到输出知识的作用,还要尽量保证其正确性。

二、批量操作功能

列表的批量操作,并且是异步请求,需要向服务端提交两类数据,一个是需要操作的数据的标识,比如PK,一个是操作类型,比如删除。

这个请求由“确定”按钮触发。

获取需要操作的数据的标识,需要遍历

<input type="checkbox" name="id[]" />

用到的JS知识点:遍历、判断是否选中、获取 input 的value。

获取操作类型,需要获取

<select>
<option value="show">Show</option>
<option value="update">Update</option>
</select>

这些操作,快速写出来,我连百分之七十的把握都没有,当然,借助搜索引擎,可以较快搞定。

以上所述是小编给大家介绍的JSONP和批量操作功能的全部叙述,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
jQuery中常用动画效果函数(日常整理)
Sep 17 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
用JS创建一个录屏功能
Nov 11 Javascript
全面解析标签页的切换方式
Aug 21 #Javascript
JavaScript第一篇之实现按钮全选、功能
Aug 21 #Javascript
JS实现图片局部放大或缩小的方法
Aug 20 #Javascript
JS获取及验证开始结束日期的方法
Aug 20 #Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 #Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
Aug 20 #Javascript
JS关闭窗口时产生的事件及用法示例
Aug 20 #Javascript
You might like
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
Python XML RPC服务器端和客户端实例
2014/11/22 Python
python自定义类并使用的方法
2015/05/07 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
python爬虫可以爬什么
2020/06/16 Python
Python无损压缩图片的示例代码
2020/08/06 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
运动会四百米广播稿
2014/01/19 职场文书
护理中职生求职信范文
2014/02/24 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python