0

Web ページには、サーバー側のフォーム検証の次のシステムがあります。たとえば、ユーザーがイベントの日付の詳細を追加している場合 (イベントにはそのような日付の詳細を多数含めることができます)、以下のように [追加] ボタンをクリックすると 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 ファイルを 1 回呼び出す代わりに、必要な場所 (validationArrName) にジャンプして実行する前に、実際にはこのファイルを 10 回以上参照することがわかりました。

後続のリクエストでは、正常に機能し、そのファイルを 1 回だけ参照します。

ここで何が問題になる可能性がありますか? 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では、マイクロタイムを使用して別の部分の時間を計り、それらをエコーし​​ます。それらはコンソールに出力されます。

ajax は毎回新しい接続を開始するため、キャッシュやインクルードに関連するものであってはなりません。

あなたのコメントに続いて、私はこの答えを編集します:

私はまだ何が起こるのか途方に暮れています。しかし、私は2つの可能性を見ています。1 つ目は、「フラグ」を使用してフォームを検証するかどうかです。ページをロードすると、すべてのフォームフラグが設定解除され、最初に送信してすべてをチェックします。後続の送信は正しく機能します。

別のオプションは、フォームを初めて送信するときevent.preventDefault()に、送信をクリックしないことですが、それでも説明がお粗末です.

関数の呼び出し$.post(...)方法 (送信ボタンのバインド方法、または $().submit() の呼び出し方法) を知りたいです。

于 2011-09-18T12:19:30.390 に答える