0

我对 jqGrid 有一些问题。

我添加了一个验证用户输入的方法。如果部门存在,则会显示警告消息,“部门存在!”

这是我的 jqGrid 代码:

afterSubmit: function(response, postdata){
                    var res = $.parseJSON(response.responseText);
                    if (res === "1") {
                        return [false,"Department Already Exist"];
                    } else {
                        return [true,"Sucess"];
                    }
                }

还有我的 php add 方法:

if($oper == 'add') {
 $deptid = $_POST['idms_department'];
 $deptnm = $_POST['department'];
 if(checkUser($deptnm) == "FALSE"){
   return "1";
 } else {
   $ins = "INSERT INTO ms_department(department) VALUES('$deptnm')";
    if(mysql_query($ins)){
        "Success INSERT msDept";
    } else {
        die("Failed : " .mysql_error());
    }
}
     mysql_close();
} else .... (another operation)

消息本身没有显示。如何正确使用 afterSubmit 方法?谢谢

更新

我已经将方法更改为

  crudMessage = function(response,postdata){
                var res   = response.responseText; // response text is returned from server.
                 if (res === "1") {
                    return [false,"Department Already Exist"];
                } else {
                    return [true,"Sucess"];
                }
             }

然后从 jqgrid 正文中删除 afterSubmit 并将此行添加到 jqgrid 导航中:

 jQuery("#departments").jqGrid('navGrid','#pager-departments',{edit:true,add:true,del:true}, {closeAfterEdit: true},{beforeShowForm: function(form) { $('#idms_department', form).hide(); },closeAfterAdd:true},{afterSubmit: crudMessage},{closeAfterSearch:true},{});

这是最新的 php 语法:

 include 'configuration.php';

 function checkDepartment($department){
   $query = "SELECT department FROM ms_department WHERE department ='$department' LIMIT 1";
   $result= mysql_query($query);
   return mysql_num_rows($result);
}

if($oper == 'add') {
 $deptid = $_POST['idms_department'];
 $deptnm = $_POST['department'];
 if(checkDepartment($deptnm) == 1){
      echo '1';
  } else {
    $ins = "INSERT INTO ms_department(department) VALUES('$deptnm')";
     if(mysql_query($ins)){
        "Success INSERT msDept";
       } else {
        die("Failed : " . mysql_error());
    }
  }
   mysql_close();
 } else 
   if($oper == 'edit'){ ....
4

1 回答 1

2

在您的代码中,您为什么期待res.insertStatus?从您提供的 PHP 代码片段中,您似乎想要编写:

var res = $.parseJSON(response.responseText);
if (res === "User Already Exist!") {

或者,也许我错过了什么?你试过调试你的代码吗?

这应该可以解释为什么alert没有出现。


此外,根据用于表单编辑的 jqGrid 文档,它的价值是什么:

afterSubmit 在收到来自服务器的响应后触发。通常用于显示来自服务器的状态(例如,数据成功保存或由于服务器端编辑原因取消保存)。接收从请求返回的数据和 id=value1,value2 类型的已发布值数组作为参数。

使用时,此事件应返回包含以下项目的数组,[success, message, new_id]其中

success 是一个布尔值,如果为 true,则进程继续,如果为 false,则出现错误消息并停止所有其他处理。(如果成功为真,则忽略该消息)。

当我们处于添加模式时,new_id 可用于在网格中设置新的行 ID。afterSubmit : function(response, postdata) { … return [success,message,new_id] }

根据这些文档,您的最终代码应删除alert并直接使用 jqGrid:

if (res === "User Already Exist!") {
    return [false, "TODO: put your error message here"];
} 
于 2013-07-15T14:35:15.983 回答