解决dwz增删改查不局部刷新的办法
一个小项目,用到了dwz,苦于官方少于维护且需要一部分前端技术一直没有深挖,迫在眉睫,遇到了跟很多人一样的问题,就是增删改查不能局部刷新,苦恼啊。经多多放查找资料和翻阅源码终于皇天不负有心。
项目使用TP3.1.3
需要做一下修改
找到 Thinkphp/lib/core/Action.class.php
查找 ajaxReturn 方法
注释掉
if(func_num_args()>2) {// 兼容3.0之前用法
$args = func_get_args();
array_shift($args);
$info = array();
$info['data'] = $data;
$info['info'] = array_shift($args);
$info['status'] = array_shift($args);
$data = $info;
$type = $args?array_shift($args):'';
}
然后在下方添加
if(method_exists($this,"ajaxAssign")) $this->ajaxAssign($data);//ajax赋值扩展
完整代码如下
/**
* Ajax方式返回数据到客户端
* @access protected
* @param mixed $data 要返回的数据
* @param String $type AJAX返回数据格式
* @return void
*/
protected function ajaxReturn($data,$type='') {
// if(func_num_args()>2) {// 兼容3.0之前用法
// $args = func_get_args();
// array_shift($args);
// $info = array();
// $info['data'] = $data;
// $info['info'] = array_shift($args);
// $info['status'] = array_shift($args);
// $data = $info;
// $type = $args?array_shift($args):'';
// }
if(method_exists($this,"ajaxAssign")) $this->ajaxAssign($data);//ajax赋值扩展
if(empty($type)) $type = C('DEFAULT_AJAX_RETURN');
switch (strtoupper($type)){
case 'JSON' :
// 返回JSON数据格式到客户端 包含状态信息
//header('Content-Type:application/json; charset=utf-8');
header('Content-Type:text/html; charset=utf-8'); //zhanghuihua
exit(json_encode($data));
case 'XML' :
// 返回xml格式数据
header('Content-Type:text/xml; charset=utf-8');
exit(xml_encode($data));
case 'JSONP':
// 返回JSON数据格式到客户端 包含状态信息
header('Content-Type:application/json; charset=utf-8');
$handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
exit($handler.'('.json_encode($data).');');
case 'EVAL' :
// 返回可执行的js脚本
header('Content-Type:text/html; charset=utf-8');
exit($data);
default :
// 用于扩展其他返回格式数据
tag('ajax_return',$data);
}
}
在任意一出添加
protected function ajaxAssign(&$result){
$result['statusCode'] = $result['status'];
$result['navTabId'] = $_REQUEST['navTabId'];
$result['message']=$result['info'];
}
退出DWZ,重新登录 再试试吧!
php处理压缩和解压缩用自带的扩展类就能实现,虽然没有压缩软件那么高效和丰富,但是在web应用中,还是非常受用的。用php打包一个zip压缩文件非常简单,几行代码就能实现。
实现效果如下:
实现源码:
<?php
$zipObj = new ZipArchive();
$res = $zipObj->open('my.zip', ZipArchive::CREATE); //创建一个zip
if ($res === true)
{ //创建成功
$zipObj->addFile('info.php'); //添加当前目录下的info.php文件
$zipObj->addFile('daixiaorui.zip'); //添加当前目录下的daixiaorui.zip文件
$zipObj->close();
echo 'done~';
}
else
{
echo 'failed';
}
?>
范例比较简单,其实ZipArchive类远不止这些方法,如果读者需要更丰富的功能,请查看文档手册
主动推送就是发布文章成功之后告诉搜索引擎来抓取了,这个百度自带了例子,下面是在这个基本上进行改进的哦.function ping($data){ $server_url = array( 'baidu' => 'http://ping.baidu.com/ping/RPC2', // 'google' => 'http://blogsearch.google.com/ping/RPC2', //'bloglines' => 'http://www.bloglines.com/ping' ); $xml = ' weblogUpdates.extendedPing ' . $data['blog_name'] . ' ' . $data['blog_home'] . ' ' . $data['blog_url'] . ' ' . $data['rss_url'] . ' ' $xml_baidu = ' weblogUpdates.extendedPing ' . $data['blog_name'] . ' ' . $data['blog_home'] . ' ' . $data['blog_url'] . ' ' . $data['rss_url'] . ' ' foreach ($server_url as $k => $s){ $s = trim($s); if(!empty($s)){ $c = curl_init(); $header = array( "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml" ); curl_setopt _array( $c, array( CURLOPT_URL => $s, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $k === 'baidu' ? $xml_baidu : $xml ) ); $content=curl_exec($c); var_dump($content); curl_close($c); } } }egister_shutdown_function 函数是什么函数呢,我们一起来看看关于egister_shutdown_function 用法吧,具体的细节步骤如下.
设定错误和异常处理三函数
register_shutdown_function(array(‘Debug’,'fatalError’)); //定义PHP程序执行完成后执行的函数
set_error_handler(array(‘Debug’,'appError’)); // 设置一个用户定义的错误处理函数
set_exception_handler(array(‘Debug’,'appException’)); //自定义异常处理。
下面讲一下register_shutdown_function() 函数.
功能:register_shutdown_function() 函数可实现当程序执行完成后执行的函数,其功能为可实现程序执行完成的后续操作。程序在运行的时候可能存在执行超时,或强制关闭等情况,但这种情况下默认的提示是非常不友好的,如果使用register_shutdown_function()函数捕获异常,就能提供更加友好的错误展示方式,同时可以实现一些功能的后续操作,如执行完成后的临时数据清理,包括临时文件等。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误、警告
实例说明
1. 一个简介的例子 , 调用一个函数
<?php
function test() {
echo "test()";
}
register_shutdown_function(array("test"));
echo "show: ";
?>
这个例子输出
show: test()
这个函数的作用就是在退出脚本前,调用已经注册的函数,并执行该函数。
2. 在类中用一个数组作为一个参数
<?php
class ClassDemo {
public function __construct() {
register_shutdown_function(array($this, "f"));
}
public function f() {
echo "f()";
}
}
$demo = new ClassDemo();
echo "before </br>";
?>
输出:
before
f()
3. 带有参数的例子:
<?php
function f($str) {
echo $str."<br>";
}
register_shutdown_function("f","hello");
class ClassDemo {
public function __construct() {
register_shutdown_function(array($this, "f"),"hello");
}
public function f($str) {
echo "f():".$str;
}
}
$demo = new ClassDemo();
echo "before </br>";
?>
注意事项
1,register_shutdown_function()函数可重复调用,但执行的顺序与注册的顺序相同
2,如果在调用register_shutdown_function()函数之前有exit()函数调用,register_shutdown_function()函数将不能执行
3,PHP4后支持注册函数参数传递
4,在某些服务端,如Apache,当前目录在register_shutdown_function()函数中能够改变
5,register_shutdown_function()函数执行在headers发送之后
/**
* 向一个字符串随机插入一个字符串
* @param unknown_type $oldstr 老字符串
* @param unknown_type $instr 插入的字符串
* @param unknown_type $encoding 字符串编码
*/
function rand_in_str($oldstr,$instr,$encoding){
$len = mb_strlen($oldstr,$encoding);
$insert_point = mt_rand(1,$len-1);
$pre_str = mb_substr($oldstr,0,$insert_point,$encoding);
$after_str = mb_substr($oldstr,$insert_point,$len-$insert_point,$encoding);
$newstr = $pre_str.$instr.$after_str;
return $newstr;
}
相关文章
- yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
- 这篇文章主要介绍了vue实现在进行增删改操作后刷新页面,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
- jquery easyui框架提供了创建网页所需要的一切,可以帮助大家建立站点,接下来,通过本文给大家介绍Jquery easyui开启行编辑模式增删改操作,感兴趣的朋友一起学习...2016-01-15
- 增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点。 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作...2020-07-11
- db.execsql(sql); 或者db.insert()、db.delete()、db.update(),并且包括数据表的创建和删除等等也可以通过execsql实现 //创建表 代码如下 复制代码 ...2016-11-25
- 这篇文章主要介绍了搭建MyBatis-Plus框架并进行数据库增删改查,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-12
Django开发RESTful API实现增删改查(入门级)
这篇文章主要介绍了Django开发RESTful API实现增删改查(入门级),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10- 这篇文章主要介绍了Mybatis实现动态增删改查功能的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路
搞了个不是局部刷新的百度搜索框下拉提示效果大致思路:前台放一个input标签,然后当该标签内的值输入有变化的时候,调用后台代码查询 符合条件的数据绑定ListBox,感兴趣的朋友可以了解下...2021-09-22- 这篇文章主要介绍了Mybatis基于xml配置实现单表的增删改查,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-12
- 本文章来为各位介绍一篇Laravel对数据库增删改查的例子了,这个是基于查询构建器来实现了,具体的如下所示。 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的...2016-11-25
- 这篇文章主要介绍了Yii针对添加行的增删改查操作,涉及Yii结合jQuery针对页面元素的动态操作及数据库增删改查等操作相关实现技巧,需要的朋友可以参考下...2016-10-20
- 这篇文章主要为大家详细介绍了C#访问SQLServer增删改查代码实例,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了微信小程序本地缓存数据增删改查实例详解的相关资料,需要的朋友可以参考下...2017-05-27
- 这篇文章主要给大家介绍了关于.NET连接数据库以及基本的增删改查操作教程的相关资料,对于刚入门的新手们来说是个很好的入门教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2021-09-22
- 一般在用验证码时我们都要实现局部刷新了,这个是必然的,也是提高用户体验的一点,下面我们来看一个php验证码在实际应用中的用法,有需要的朋友来参考一下。 /* * Aut...2016-11-25
- 这篇文章主要给大家介绍了关于Spring Boot如何实现定时任务的动态增删启停的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-19
- 这篇文章主要为大家详细介绍了Flutter实现局部刷新,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-07-14
- 这篇文章主要介绍了Spring框架+jdbcTemplate实现增删改查功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
- 这篇文章主要介绍了Python中tkinter+MySQL实现增删改查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-09