我有一个用于创建新用户的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){
返回[假, “存在”];
}); }
我知道这不是真正的验证,但不应该产生与第一个脚本相同的结果吗?
非常感谢
答案 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片段。