首先说一下:
1、$this->ajaxReturn('', '操作成功', 1);
返回的值是这样的{data: "", info: "操作成功",status: 1}。
2、success('操作成功!')和error('写入错误!')返回的样式是这样的:{info: "操作成功",status: 0 ,url: ""},只不过status都为0。
3、$this->display();是没有返回值的,虽然这句话有点傻,不过下面会遇到。
说正题:
谈ajax方式提交数据:
第一种:
文章的删除按钮:
$("a.items_delete").live('click',function ()
{
var btn = $(this);
var url = $(this).attr('href');
var id=$(this).attr('rel');
$.ajax({
type : "POST",
url : url,
data: "id="+id,
dataType : "json",
success : function (json){
if (json.status == "1"){
btn.parent().parent().remove();
}
},
});
return false;
});
json为返回值的数组名称,返回的三个值分别是json.data、json.info、json.status。如果你设置的是这样的 $this->ajaxReturn($items, '操作成功', 1);,那么你的返回值json.data就是个数组,于是,里面的值会是这样的:json.data.id、json.data.ti
第二种:
表单的提交:
var URL="{:U('News/index')}";
var options = {
success: function(json) {
if(json.status == 1){
$.msgBox({
title: "信息提示",
content: json.info,
type: "info"
});
location.href=URL;
}else{
$.msgBox({
title: "信息提示",
content: json.info,
type: "info"
});
}
}
};
$(document).ready(function() {
UE.getEditor('myEditor');
$("#newsForm").validationEngine('attach', {
onValidationComplete: function(form, status) {
if (status == true) {
UE.getEditor('myEditor').sync();
$("form").ajaxSubmit(options);
}
}
});
})
success: 中需要判断json.status,是1则成功,0则失败。因此,这个时候就要用$this->ajaxReturn('', '操作成功', 1);,因为你的success('操作成功!')返回的status也是0;
最近发现这个真是很方便的事情:
因为所有的自动验证也可以通过这种方式返回回来,包括长度不符合,名称重复,两次输入的密码不相同什么的,都会这样通过提示框,不会跳出提示页面了。
说到这,就开始第三种了:
不过有些时候,你还会遇到这种问题:
你点的是连接,然后跳转这样的提示,看来没有这么尽善尽美的事情。
当然我遇到不少后台用框架做的,做一个美化的提示窗口是不错的选择。但是总感觉差了什么,于是我准备把所有a标签都用ajax提交,于是产生如下情况。
第三种:
当你跳转的时候,成功了则display,这个时候是不会有返回值的,于是如果你像上面一样用if,会发现失败了会弹出提示框,成功了没有反应,右键点击仍然能跳转;
于是我就这样做:
$("a").live('click',function ()
{
var url=$(this).attr('href');
$.ajax({
type : "POST",
url : url,
dataType : "json",
success : function (json){
if (json.status == "0"){
$.msgBox({
title : "信息提示",
content : json.info,
type : "error"
});
}
},
error : function (){
location.href=url;
},
});
return false;
});
这样是可行的,不过却是很滑稽的,失败了跳转,没听说过啊,而且点击链接会有大约半秒的停顿,用来判断是否失败了。不知道大家有什么好的方法么?指教指教。
附:刚刚又试了下,这种做法在使用colorbox等插件加载页面时会出问题,看来果然还是不能完美。
最佳答案
