有人用PHP+DWZ框架做后台吗?
最近用DWZ做后台,发现Tab跳转总不成功。官方上边的文档说太简单了,大家有没写过相关例子?我FORM提交后用JSON解释总跳不回去...
官方写法:
DWZ 表单提交dwz.ajax.js
· Ajax 表单提交后自动调用默认回调函数, 操作成功或失败提示.
Form标签上增加 onsubmit="return validateCallback(this);
· Ajax 表单提交后如果需要重新加载某个navTab或关闭dialog,可以使用dwz.ajax.js中事先定义的方法navTabAjaxDone/dialogAjaxDone
注意:如果表单在navTab页面上使用navTabAjaxDone,表单在dialog页面上使用dialogAjaxDone
Form标签上增加onsubmit="return validateCallback(this, navTabAjaxDone)"
或onsubmit="return validateCallback(this, dialogAjaxDone)"
· Ajax 表单提交后如果需要做一些其它处理也可以自定义一个回调函数xxxAjaxDone。例如下面表单提交成功后关闭当前navTab, 或者重新载入某个tab.
Form标签上增加onsubmit="return validateCallback(this, xxxAjaxDone)"
服务器端响应
Ajax表单提交后服务器端需要返回以下json代码:
{
"statusCode":"200",
"message":"操作成功",
"navTabId":"",
"rel":"",
"callbackType":"closeCurrent",
"forwardUrl":""
}
以下是dwz.ajax.js中定义的navTabAjaxDone和dialogAjaxDone代码片段:
/**
* navTabAjaxDone是DWZ框架中预定义的表单提交回调函数.
* 服务器转回navTabId可以把那个navTab标记为reloadFlag=1, 下次切换到那个navTab时会重新载入内容.
* callbackType如果是closeCurrent就会关闭当前tab
* 只有callbackType="forward"时需要forwardUrl值
* navTabAjaxDone这个回调函数基本可以通用了,如果还有特殊需要也可以自定义回调函数.
* 如果表单提交只提示操作是否成功, 就可以不指定回调函数. 框架会默认调用DWZ.ajaxDone()
* <form action="/user.do?method=save" onsubmit="return validateCallback(this, navTabAjaxDone)">
*
* form提交后返回json数据结构statusCode=DWZ.statusCode.ok表示操作成功, 做页面跳转等操作. statusCode=DWZ.statusCode.error表示操作失败, 提示错误原因.
* statusCode=DWZ.statusCode.timeout表示session超时,下次点击时跳转到DWZ.loginUrl
* {"statusCode":"200", "message":"操作成功", "navTabId":"navNewsLi", "forwardUrl":"", "callbackType":"closeCurrent"}
* {"statusCode":"300", "message":"操作失败"}
* {"statusCode":"301", "message":"会话超时"}
*
*/
function navTabAjaxDone(json){
DWZ.ajaxDone(json);
if (json.statusCode == DWZ.statusCode.ok){
if (json.navTabId){ //把指定navTab页面标记为需要“重新载入”。注意navTabId不能是当前navTab页面的
navTab.reloadFlag(json.navTabId);
} else { //重新载入当前navTab页面
navTabPageBreak();
}
if ("closeCurrent" == json.callbackType) {
setTimeout(function(){navTab.closeCurrentTab();}, 100);
} else if ("forward" == json.callbackType) {
navTab.reload(json.forwardUrl);
}
}
}
dwz?php?form
[解决办法]
<?php
$list_edit=basename(__FILE__);
$tmp=explode("_",$list_edit);
$list_index=$tmp[0].'_list.php';
define("INDEXPAGE",$list_index);
define("EDITPAGE",$list_edit);
define("MENU",$tmp[0]);
$table='access';
if(empty($_GET['id'])){$action='insert';}else{$action='update&id='.$_GET['id'];}
if(($_GET['action']=='update' and !empty($_GET['id'])) or $_GET['action']=='insert'){
$arr = array(
'statusCode' => '0',
'message' => '提交失败',
'navTabId' => MENU,
'callbackType' => '',
'forwardUrl' => '',
);
$title=$_POST['title'];
if($_GET['action']=='update'){//更新
$sql="update $table set title='$title' where id=".(int)$_GET['id'];
}else{//插入
$createtime=time();
$sql="insert into $table(title)values($title)";
}
if(mysql_query($sql)){$arr['message']="提交成功";$arr['statusCode']="1";}else{$arr['message']='提交失败';}
$json_string = json_encode($arr);
echo $json_string;
}else{//读取
if(!empty($_GET['id'])){
$id=(int)$_GET['id'];
$sql="select * from $table where id=$id";
$result =mysql_query($sql);
$Info = mysql_fetch_array($result,MYSQL_ASSOC);
}
?>
<div class="pageContent">
<form method="post" action="<?php echo EDITPAGE; ?>?action=<?php echo $action; ?>" class="pageForm required-validate" onsubmit="return iframeCallback(this, dialogAjaxDone);" enctype="multipart/form-data">
<div class="pageFormContent" layoutH="56">
<table>
<tr>
<td height=30>标题:</td><td><input name="title" type="text" value="<?php echo $title;?>" size="60" /></td>
</tr>
</table>
</div>
<div class="formBar">
<ul>
<li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li>
<li>
<div class="button"><div class="buttonContent"><button type="button" class="close">取消</button></div></div>
</li>
</ul>
</div>
</form>
</div>
<?php
}
?>