-1

非常によく似たコードが 2 つあります。1 つは機能し、もう 1 つは機能しません。これは機能します。

$(document).ready(function() {
  return $("form#myform").live("submit", function() {
    var valuesToSubmit;
    valuesToSubmit = $(this).serialize();
    $.ajax({
      url: $(this).attr("action"),
      data: valuesToSubmit,
      dataType: "JSON",
      success: function(json) {
        return $("#form-container").html(json["text"]);
      },
      error: function(json, xy, mycode) {
        var msg, response;
        response = $.parseJSON(json.responseText);
        msg = response.text;
        return alert(msg);
      }
    });
    return false;
  });
});

これはしません:

$(document).ready(function() {
  return $("form#myform").submit(function() {
   //same stuff as before        

  });
});

Rails コントローラーは json のみで応答するようになり、html 応答はありません。私が見た2つの違いは、どちらもコントローラーに正常に送信されることですが、最初のケースでは、要求は本来あるべきjsonであり、応答はjsonであるため、正常に動作します。しかし、2 番目のケースでは、「dataType: "JSON"」を指定しても、リクエストのタイプは html であり、応答は html であり、フォーム アクション ページにリダイレクトされ、戻るボタンを押して同じページに移動すると、ページ、ログアウトしました。だから私はバックページに移動すると私もログアウトする理由を知りたい.

$(something).submit(function(){}); の違いは何ですか? および $(something).live('submit', function(){})。どちらもアクションに投稿していますが、一方は html リクエストを作成していますが、もう一方は json リクエストを作成しています。一方は実際にアプリからログアウトしますが、もう一方はログアウトしませんか?

4

1 に答える 1

0

.submit.bind要素自体を呼び出します.liveが、イベント リスナーをドキュメントにアタッチし、バブルが発生するのを待ちます。実際には、要素を削除して新しい同一の要素を作成すると、 を使用して追加されたリスナーは削除されますが、 を使用してbind追加されたリスナーは削除され.liveません。

あなたが私たちに与えてくれた情報の量では、私たちはその質問に答えることができません. コンソールにログvaluesToSubmitを記録して、そこに違いがあるかどうかを確認してみてください (違いがあり、それが何かに影響を与えている理由がわからない場合は、ここに投稿してください。私たちがお手伝いします)。

.liveどちらも.bindバージョン 1.7 で非推奨になったため、アップグレードして何が起こるかを検討する必要があります。値を返す必要もありません。次のコードが必要です。

$(document).ready(function() {
  $(document).on('submit', 'form#myform', function() {
   //same stuff as before        

  });
});
于 2012-06-20T11:31:39.613 に答える