如何检查jsgrid中插入/编辑的项目是否重复?

时间:2016-03-29 07:26:50

标签: javascript php jsgrid

我尝试为jsgrid构建自定义验证器来检查item.Name在插入或编辑之前是否真的存在于DB中以避免任何重复的行。

问题我读了三次jsgrid的文档,但我不知道如何解决这个问题。

这项工作https://github.com/tabalinas/jsgrid-php给了我太多帮助,我转变为对我的工作和mysqli有用。

这个想法: 如果值存在与否,我创建了函数检查DB,如果存在,则在php类中返回true,否则返回false

public function checkName($name){
    try{
        if(!empty($name)){
            $co_conn = $this->CON_conn->open_connect();
            $getsame = mysqli_query($co_conn,"select Name from category where Name = '$name'");
            if($getsame){
                $numit = mysqli_num_rows($getsame);
                if($numit > 0) return true;
                else return false;
            }
            else return true;
            $this->CON_conn->close_connect($co_conn);
        }
        else return true;
    }
    catch(Exception $er){
        return true;
    }
}

我在外部文件“CheckValue.php”中调用了这个函数

<?php require_once '////the director of the class';
$chnow = new NameOfMyClass();
$result = true;
switch($_SERVER["REQUEST_METHOD"]) {
    case "CHGO":
        parse_str(file_get_contents("php://input"), $_CHGO);
        //to ensure if it work i tested it.
        $result = $chnow->checkName($_CHGO["Name"]);
    break;
    default:
        $result = true;
    break;
}
header('Content-type: application/json');
echo json_encode($result);
?>
<.html>在basic.html中

$(function() {
    $.ajax({
        type: "GET",
        url: "../bin/update.php"
    }).done(function(response) {
        response.unshift({ ID: "0", Name: "" });
        $("#jsGrid").jsGrid({
            height: "50%",
            width: "70%",
            selecting: false,
            filtering: false,
            editing: false,
            sorting: false,
            paging: true,
            autoload: true,
            pageSize: 15,
            pageButtonCount: 5,
            controller: {
                loadData: function(filter) {
                    return $.ajax({type:"GET", url: "../bin/update.php",data:filter});
                },
                updateItem: function(item) {
                    return $.ajax({type:"PUT",url: "../bin/update.php",data: item});
                },
                insertItem: function(item) {
                    /*$.ajax({type: "CHGO",url: "..bin/Checkvalue.php",data:item.Name, dataType: "json",
                    success: function(data){
                        JSON.parse(data);
                        consol.log(data);
                        //alert(data);
                        //I used many ways to find why its not work, then I commented it
                        }
                    });
                    //return $.ajax({type: "POST",url: "../bin/update.php",data: item});
                    //return data;

                            //else sweetAlert("error", "this value is exist!", "error");
                            //here I thought merge sweetalert js will give a good look of work not the normal message.
*/
                }
            },
            fields: [
                { name: "ID", type: "number",width: 50, editing:false, inserting:false },
                { name: "Name", type: "text", width: 50, validate: ["required",{
                        message: "this value is exist",
                        validator: function(value,item){
                            if(value != "")
                            {
                                $.ajax({
                                    type: "CHGO",
                                    url: "..bin/Checkvalue.php",
                                    data: item.Name,
                                    success: function(data){
                                        if(data == true) 
                                        //I assume here return the true/false to activate the error message but nothing work..sorry
                                    }
                                });
                            }
                        }
                    } ]
                },
                { type: "control", modeSwitchButton: false, deleteButton: false }
            ]
       });
    });
    $(".config-panel input[type=checkbox]").on("click", function() {
        var $cb = $(this);
        $("#jsGrid").jsGrid("option", $cb.attr("id"), $cb.is(":checked"));
    });     
});

请帮忙,我试着用2天来解决问题。 感谢开发人员编写validate js文件 我使用了jsgrid-1.4.1

1 个答案:

答案 0 :(得分:2)

原因是validate仅支持同步验证,我们示例中的验证需要ajax调用,因此它是异步的。

您有两种选择:

  1. 事先将数据加载到客户端并验证客户端上的插入项(因此验证将是同步的)
  2. insertItem方法中验证插入。请查看以下问题以了解更多详细信息https://github.com/tabalinas/jsgrid/issues/190