0

在网页上,我们有以下服务器端表单验证系统。例如,如果用户正在为一个事件添加日期详细信息(并且一个事件可以包含许多这样的日期详细信息),我们会在单击“添加”按钮时调用一个 javascript 函数,如下所示。

validateForm('frmName','codelibrary/classes/myclass.php','validationArrName')
where:
@frmName = form name
@codelibrary/classes/myclass.php = location of class file, that contains classes and functions for server side validation
@validationArrName = Type of validation we apply

In the php script, validationArrName is defined as a list of keys (representing form fields) and values (representing the functions we will call to validate that form field).
validationArrName  = array ('fieldName1'=>validationFun1,'fieldName2'=>validationFun2);

eg:
fieldName1 = email_address
validationFun1 = validateEmail()

在html页面上,我们通过ajax调用服务端验证如下。

$.post(className,$("form[name="+formName+"]").serialize()+"&isValidate=1&validateArrayName="+validateArrayName,function(data){ ... });

如果验证函数报告错误,我们会在 html 页面上显示相应的错误消息。

问题是当我们第一次这样做时(例如:在硬刷新页面之后),与后续请求相比,提交此日期详细信息表单进行验证需要花费大量时间。

我们观察到,它不是调用一次 codelibrary/classes/myclass.php 文件,而是在跳转到所需位置 (validationArrName) 并运行该文件之前实际上引用了该文件超过 10 次。

对于后续请求,它可以正常工作并且只引用该文件一次。

这里可能是什么问题?我们使用 jquery submit 会不会有问题?

4

1 回答 1

0

你能做的最好的事情就是时间的东西。

在 JavaScript 中:

console.time('post load'):
$.post(className,$("form[name="+formName+"]").serialize()+"&isValidate=1&validateArrayName="+validateArrayName,function(data){ 
    console.timeEnd('post load');
    console.log('data');
    ... 
});

在 php 中,使用 microtime 对不同部分进行计时并回显它们。它们将打印在控制台中。

它不应该是缓存或包含相关的,因为 ajax 每次都会启动一个新连接。

根据您的评论,我编辑此答案:

我仍然不知道会发生什么。但是我看到了两种可能性。第一个是您使用“标志”来验证表单。当您加载页面时,所有表单标志都未设置,并首先提交检查它们。随后的提交工作正常。

另一种选择是第一次提交表单时,您不会event.preventDefault()点击提交,但它仍然是一个松散的解释。

我很想看看您如何调用该$.post(...)函数(如何绑定提交按钮,或者如何调用 $().submit())。

于 2011-09-18T12:19:30.390 回答