2010-11-25 6 views
1

javascriptで奇妙な問題が発生しました。jsファイルがクライアント側にダウンロードされているかどうかを確認する方法

問題ページでは、jQueryコードを使用してデータを収集し、入力チェックの検証を行います。検証が真であれば、サーバーに送信されます。 Googleのユーザーの中には、10%または多少少なめに報告したユーザーもいますが、ウェブサイトに投稿できませんでした。

私たちはこの問題を抱えていたユーザーの一人と話をし、後でさらに混乱しました。

テスターのPC:XP、IE8、Firefoxの

検証がでfalseに設定されたため、彼はIEとJavaScriptの検証は発生しませんでした使用される最初の時間は、彼は、サーバーにデータを送信することができませんでしたでもありませんデフォルト。 (検証が偽であればエラーメッセージが表示されるはずです)

その後、彼はF.F. (F.F.はすぐに働いた)。

もう一度IEに戻って、検証スクリプトが機能し始め、送信が再び成功しました。

すべてのテスターの後にもう問題はなく、どちらも複製できませんでした。

jsファイルが適切にダウンロードされないソフトウェアやプログラムがあるのでしょうか? ページは別のウェブサイトのi-フレームでもホストされているので、これはウイルス対策の一部がドメイン全体の脅威だと思うかもしれないと考えて、投稿作業を中止した理由です。

もしそうなら、どのようにして、ユーザーが送信を行う前に必要なjsファイルがすべてダウンロードされていることを確認できますか?

問題はクライアント側でのみ発生し、サーバー側の検証はまだ行われていないため、他に何を調べてください。

@drachenstern:編集

+1

プログレッシブエンハンスメント? – strager

答えて

0

クライアントsdeでjavascriptを読み込む際に遅延が生じる可能性があります。アンチウイルス "インターネットsecutiry"製品(可能性があります)は、多くのチェックを行います。

インターネットセキュリティ製品が通話をスキャンし、「OK、これは安全です」と判断してからjavascriptファイルがダウンロードされる可能性が高くなります。そこにかもしれないこれの遅延。

状況を回避するにはどうすればよいですか?

  1. フォームをJavaScriptに結合しないでください。 javascriptの有無にかかわらず、常に起こらせてください。もしjavascriptが準備が整っていれば、ユーザーは良い経験を得るでしょう(即時検証)。まだ準備ができていない場合、ユーザーは依然として送信を行い、検証を行い、エラーメッセージを伝統的な方法でスローすることができます。

  2. javascriptがロードされるまでユーザーを待ちます。あなたは彼が待たなければならないことをユーザに伝えるために、ページのどこかに小さな「ローディング」アイコンを置くことができます。ユーザーはデータを入力できますが、まだ送信できません。バックグラウンドでは、javascriptがロードされているかどうかを確認し続けます(setTimeoutと特定の変数を確認してください)。いったん読み込まれると、javascriptのバリデーションを使用することができます。

  3. 2つの組み合わせ:javascriptがロードされていることがわかるまで、javascript以外のsubmitを許可します。設定が完了したら、javascript検証を使用します。

1

ためのおかげであなたはjQueryのは、完全にロードされ、実行された後にのみ、それを可能にする、送信ボタンを無効にすることができます。

<input type="submit" disabled />

そして、あなたのJavaScriptで、

 
$(function() { 
    $('input:submit').attr('disabled', false); 
}); 

しかし、

  1. ユーザーに 何かを提出することができませんことをご承知おきます。たとえば

    サポートしていないブラウザJa vascript

  2. ユーザーコンテンツを確認するにはJavaScriptを使用してください。サーバー側で常に のデータを再度検証してください。
+1

最初のポイント:これを回避するには、JavaScriptを使用して最初に送信を無効にします。 – nnevala

+0

どうやってロードされているコントロールを無効にするjavascriptを知っていますか? – timdream

0

まず、サーバー上のすべてのものを常に検証することをお勧めします。クライアントで妥当性を検証する唯一の理由は、不正な入力に対してユーザーへの応答を高速化することです。

さらに、各ファイルがダウンロードされて処理されるようにするには、各ファイルにグローバル変数を設定してから、ドキュメント内の各変数が見つかったかどうかを確認することができます。それは粗悪なバックですが、うまくいくでしょう。

ユーザーが使用していたIEのバージョンは指定していませんが、IEですぐに読み込まれないファイルの問題は、通常の動作に変わりはありません。私はそれを何度も実行してきましたが、唯一の解決策は私にとってはctrl-F5です。私はそこに何が言いたいのか分からない。すべてのブラウザが常に同じように応答できるようにすることができればうれしいですが、できません。また、これらすべてのテストを行っていたOSはどのようなものでしたか?そしてあなたはどのブラウザをテストしていますか?

IEでどのような動作が見られますか? IE8以降を使用している場合は、確実にデバッグツールが用意されており、IEツールを使用せずにFirebugLiteを使用してIEでページをデバッグすることはいつでも可能です。 IEでページが何をしているのか分かりました。おそらく、それはjavascriptの解析エラーを投げているのでしょうか? IEのウィンドウクロムにアイコンがありますか?

しかし、2番目の段落を修正しようとすると、検証を処理するためにJavaScriptを使用していると間違っていると思います。しかし、私はただの男です。

+0

私は3つのレベルすべてで検証するのが理想だと思います。クライアント側、サーバー側、およびDB制約があります。 –

+0

@MattBriggs〜私は同意しますが、クライアントで検証する唯一の理由は、ユーザーのプロセスを強化し、即時のフィードバックを与えることだけです。単なる利便性であるように、いつでも簡単にバイパスされます。 – jcolebrand

+0

問題は、クライアント側のレベルで停止しました。データはサーバー側にまったく送信されませんでした –

関連する問題