探索奥秘,发现真理!不明真相点进去看!(关于ajax)

浏览:2260 发布日期:2013/06/08 分类:技术分享 关键字: ajax
高手请看最后,谢谢。
首先说一下:
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.title…………

第二种:
表单的提交: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等插件加载页面时会出问题,看来果然还是不能完美。
最佳答案
评论( 相关
后面还有条评论,点击查看>>