【问题标题】:Show Error Message from Server Response显示来自服务器响应的错误消息
【发布时间】:2013-07-15 14:06:27
【问题描述】:

jqGrid 有一些问题。

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

这是我的 jqGrid 代码:

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

还有我的php添加方法:

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'){ ....

【问题讨论】:

  • 您不会在“部门存在!”消息的位置显示任何代码(顺便说一句,这是糟糕的英语)应该显示或首先触发它。我还想知道您的 checkUser 函数是否真的返回字符串“FALSE”。你最好返回布尔值 false
  • 我认为你必须在afterSubmit 之外实现errorTextFormat,因为你使用die。我不是 PHP 开发人员。您能否插入完整的 HTTP 响应(包括所有 HTTP 标头和正文)以防return "1"。您可以使用FiddlerFirebug 或 Internet Explorer 的开发者工具(按 F12 启动)或 Chrome 来捕获完整的 HTTP 流量。
  • 嗨@Oleg,感谢评论,如果我提交了一个数据库中不可用的新值,那么它就是成功的。我已经实现了一些验证方法来检查该值是否已经存在。如果成功,它将发布:200 OK
  • 我只是不是 PHP 开发人员,但代码的某些部分看起来很可疑。例如if(checkUser($deptnm) == "FALSE") 包含return "1";(没有echo 或类似的东西)。案例if(mysql_query($ins)){...} 包含"Success INSERT msDept"; 没有 echoreturn。所以我想从 HTTP 流量的跟踪中看到完整的确切 HTTP 响应。真的可以在回复正文中看到"1""Success INSERT msDept" 或其他文本吗? response.responseText 需要拨打$.parseJSON 吗?
  • 响应体没有抛出任何东西。我只是将代码更改为 echo "1" 并在正文上打印 1。这是萤火虫响应: Connection Keep-Alive Content-Length 0 Content-Type text/html Date Mon, 15 Jul 2013 15:29:17 GMT Keep-Alive timeout=5, max=100

标签: php jquery ajax jqgrid


【解决方案1】:

在你的代码中,你为什么期待res.insertStatus?从您提供的 PHP 代码的 sn-p 来看,您似乎想要编写:

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

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

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


另外,根据jqGrid documentation for form editing

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

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

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

new_id 可用于在添加模式下设置网格中的新行 ID。 afterSubmit :函数(响应,postdata) { … 返回 [成功,消息,new_id] }

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

if (res === "User Already Exist!") {
    return [false, "TODO: put your error message here"];
} 

【讨论】:

  • 嗨@justin,我已经更新了我的问题。但仍然错误消息不起作用。有没有可能?谢谢
  • 试试if (res == "1") {==。另外,您是否验证了您的 JSON 响应是您所期望的?
  • 如何验证 JSON 响应?
  • 使用 JavaScript 调试器。一个不错的首选是 Firefox 和 Firebug (getfirebug.com)。或者您可以只使用 Chrome (IE?) 上的开发人员工具。在任何情况下,您都可以看到 XHR (AJAX) 请求发出,并将响应发送回浏览器。如果需要,您还可以设置断点并实时调试。
  • 嗨@Justin,是的,如果存在,来自服务器的响应为 1,如果不存在,则为 0。
猜你喜欢
  • 2012-04-08
  • 1970-01-01
  • 2019-07-02
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多