2012-03-21 131 views
0

我有一个jqGrid窗体来创建新的用户,我想要的是确保(在窗体提交的其他字段之间)用户名不存在于数据库中。
所以我创建了一个beforeSubmit动作,当按下提交按钮但在提交表单之前执行。
我认为这个函数可以工作,因为下面的代码总是返回“User exists”;jqGrid Ajax验证里面beforeSubmit

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

但是当我尝试TI使用$不用彷徨发出AJAX请求到服务器,以查看这个用户名已经存在,我总是得到一个k is undefined错误。这是产生误差的代码

beforeSubmit:功能(POSTDATA,formid){

$获得( “?项目管理R =用户/ usernameExists & TMPL = JSON &用户名=” + postdata.username,function(data){
return [false,“Exists”];
}); }

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

非常感谢

回答

0

首先我解释一下为什么像你期望你的代码不工作。

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

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

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

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

+0

非常感谢Oleg。我用afterSubmit,因为我发现在另一篇文章中,它的工作。 – tliokos 2012-03-21 20:37:22

+0

@Theodore:不客气! – Oleg 2012-03-22 06:09:57