3

私がやろうとしていること:バックグラウンドで実行されるスクリプトにフォームを送信し、入力フィールドにアニメーション化されたドットを含む読み込みテキストを提供し、同じフィールドで完了したらメッセージを返します。

問題:入力変数をキャッチして、アニメーション化された読み込みメッセージを表示することができます。私はこれに少し慣れていないので、ネストされたコードはおそらく混乱していて、ロード表示はおそらくネストできる関数であるはずです(これを正しく理解している場合)。読み込み中のメッセージの表示で停止するため、フォームが実際に送信されることはなく、スクリプト全体がどこかで問題になっていると思います。

私が持っているもの

<script>
  jQuery(document).ready(function($)
  {
    $("#subsenid").submit(function(e)
    {
      e.preventDefault();
      var senid = $("input:text[name=submit_sen]").val();
      i = 0;
      setInterval(function() 
      {
        i = ++i % 4;
        $("#submit_senid").val("Importing"+Array(i+1).join("."));
      }, 500, function()
        {
          $.get("/inc/receiving_script.php", {psnid: senid}, function(data)
          {
            $("#submit_senid").val("All done");
          });
        }
      });
    });
  </script>

簡単に言うと、フォームを送信し、アニメーションの読み込みメッセージを表示し、スクリプトからメッセージを返します(スクリプトからの適切な返信メッセージの代わりに、「すべて完了」メッセージを追加して、何かが起こったかどうかを確認しました)。

正しい方向へのポインタや提案は大歓迎です。

さらに情報が必要な場合は、できるだけ早く提供します。

4

1 に答える 1

1

firebugなどを使用していますか?あなたがすべき。これは、コードのデバッグに役立つ Firefox 用のプラグインです。(他の最新のブラウザーにも同様のコンソールとツールがあり、通常はページを右クリックして [要素の検査] などを選択することでアクセスできます)

firebug を開くと、スクリプトへの ajax 呼び出しとその結果を確認できます。また、コードに実行ブレーク ポイントを設定し (サブミット ハンドラーの先頭に設定)、スクリプトを 1 行ずつ実行することもできます。そうすれば、実際に何が起こっているかを確認したり、変数の内容などを確認したりできます。また、DOM も簡単に調べることができます。フロントエンド開発者にとってかけがえのない助けになります!

第二に、あなたのコードにいくつかの問題があります。匿名関数で ajax 呼び出しを実行し、それを setInterval に 3 番目のパラメーターとして提供しますが、これは機能しません。アニメーションを開始し、ajax 呼び出しを実行し、ajax コールバックでアニメーションを停止し、取得したデータを必要な場所に設定する必要があります。

テストされていませんが、次のようなもので正しい軌道に乗るはずです。

jQuery(document).ready(function($){

    $("#subsenid").submit(function(e){
        e.preventDefault();
        var senid = $("input:text[name=submit_sen]").val();
        var i = 0;

        var animationInt = setInterval(animateBox, 500);
        function animateBox(){
            i = ++i % 4;
            $("#submit_senid").val("Importing"+Array(i+1).join("."));
        }

        $.get("/inc/receiving_script.php", {psnid: senid}, function(data){
            clearInterval(animationInt);
            $("#submit_senid").val("All done");
        });
    }
  });
});
于 2012-09-01T08:31:10.103 に答える