在beforeSubmit里面的jqGrid Ajax验证

时间:2012-03-21 16:50:42

标签: jquery jqgrid

我有一个用于创建新用户的jqGrid表单,我想要的是确保(在表单提交的其他字段中)用户名尚未存在于数据库中。
所以我创建了一个beforeSubmit操作,该操作在按下提交按钮时但在提交表单之前执行 我认为该功能有效,因为下面的代码总是返回“User exists”;

  

beforeSubmit:function(postdata,formid){return [false,“User exist”]; }

但是当我尝试使用$ .get向服务器发出ajax请求以查看用户名是否已经存在时,我总是会收到k is undefined错误。这是产生错误的代码

  

beforeSubmit:function(postdata,formid){

     

$得到( “项目管理R =用户/ usernameExists和放大器; TMPL = JSON和放大器;用户名=”   + postdata.username,function(data){
   返回[假, “存在”];
  }); }

我知道这不是真正的验证,但不应该产生与第一个脚本相同的结果吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

首先,我解释为什么你的代码不像你期望的那样工作。

方法$.get工作异步。所以

  • 您的函数beforeSubmit首先开始$.get
  • 然后返回undefined值,因为beforeSubmit函数的主体将完成。
  • 然后异步$.get请求将从服务器获得响应后,将调用function(data) {回调(它是success回调)。
  • 您的success回调会从回调返回值return[false,"Exists"]; $.get不会分析success回调中的任何返回值,因此数组[false,"Exists"]将被$.get丢弃。

您可以$.ajax使用async: false参数代替$.get作为解决方法,但最好不要实现任何beforeSubmit。如果基于服务器的代码发现无法保存用户更改或输入字段包含某些验证错误,则服务器应返回具有某些error HTTP status code的响应。如果验证错误 - the Client Error,则状态代码可以是400或更高,如果在服务器上处理请求时出现其他一些错误,则状态代码可以是500或更高 - Server Error。服务器响应的主体可以是jqGrid将向用户显示的消息的HTML片段。

您可以自定义有关errorTextFormat回调的错误消息。有关其他信息,请参阅herehere