1

Ajax リクエストの送信時に問題が発生しました。リンク要求をクリックすると、サーバーに 3 回送信され、応答がありませんでした。

弱体化させるためにリクエストが 3 回送信されるのはなぜですか?

クエリの作成でどこが間違っていましたか?

コード:

run.html.erb

...
<%= link_to "Next", "#", :id => 'next', :class =>
...

run.js.erb

(function(){

  $("#next").click(function(){

    $.ajax({
      type: 'POST',
      url: '/engine/tff',
      success: function(data){
        alert("ok");
        $("#question").html(data);
      }
    });


    return false;
  });
});

コントローラ

def tff
    respond_to do |format|
      format.js render :text => "hello"
    end
end
4

2 に答える 2

2

クリックイベントが複数回バインドされていると思いますが、おそらくスクリプトが複数回呼び出されています。私はレールに精通していないので、複数の呼び出しの理由がわかりません。

それを回避するためにできることは、クリックイベントをバインドする前にバインドを解除するか、onAPIを使用することです。

function ajaxRequest(){
    $.ajax({
      type: 'POST',
      url: '/engine/tff',
      success: function(data){
        alert("ok");
        $("#question").html(data);
      }
    });
    return false;
  }

$("#next").unbind("click").bind("click",ajaxRequest);

また

$(document).on("click","#next",ajaxRequest);

また、ドキュメントの準備ができてバインドしようとしていて、コードにタイプミスがあるかどうかもわかりません。ただし、次のようにラップする必要があります。

$(function(){
  $("#next").click(ajaxRequest);
});
于 2012-04-15T16:39:08.727 に答える
1

私が最近遭遇したことの1つは、デフォルトのdataTypeが.jsをテキストではなくスクリプトとして解釈するため、jqueryが結果を実行しようとすることでした。dataType: "text"ajax呼び出しにを追加する必要があるかもしれません。ただし、これが3つの呼び出しにどのように変換されるかはわかりません。

falseを返すとクリックが先に進まないはずだと思いましたが、apneadivingが示唆するようにpreventDefault()を使用する方が良い形式かもしれません。

于 2012-04-15T16:33:46.980 に答える