我有一个用于创建新用户的jqGrid表单,我希望确保(在表单提交的其他字段中)用户名不存在于数据库中。
因此,我创建了一个beforeSubmit操作,该操作在按submit按钮时执行,但在表单提交之前执行。
我认为这个函数可以工作,因为下面的代码总是返回“用户存在”;
函数(postdata,formid) {User,“用户存在”;}
但是,当我尝试使用$.get向服务器发出ajax请求以查看用户名是否已经存在时,我总是会得到一个k is undefined错误。这是产生错误的代码。
函数(postdata,formid) { $.get("project-management?r=Users/usernameExists&tmpl=json&username=“+ postdata.username,函数(数据){ 返回虚假,“存在”; );}
我知道这不是真正的验证,但不应该产生与第一个脚本相同的结果吗?
非常感谢
发布于 2012-03-21 18:26:37
首先,我解释为什么您的代码不像您预期的那样工作。
方法$.get异步工作。所以
beforeSubmit首先启动$.getundefined值,因为beforeSubmit函数的主体将完成。$.get请求从服务器获得响应后,将调用function(data) {回调(它是success回调)。success回调从回调返回值return[false,"Exists"];。$.get不分析来自success回调的任何返回值,因此$.get将丢弃数组[false,"Exists"]。您可以使用$.ajax和async: false参数,而不是$.get作为解决办法,但更好的做法是根本不实现任何beforeSubmit。如果您的基于服务器的代码发现无法保存用户更改,或者输入字段包含一些验证错误,则服务器应该返回具有错误HTTP状态码的响应。在验证错误( 客户端错误 )时,状态代码可以是400或更高,如果在服务器- 服务器错误上处理请求时出现其他错误,则状态代码可以是500或更高。服务器响应的主体可以是jqGrid将向用户显示的消息的HTML片段。
https://stackoverflow.com/questions/9809170
复制相似问题