输入Keypress上的咖啡反复发送PUT请求

时间:2013-04-24 00:07:47

标签: jquery ruby-on-rails json coffeescript

我有这个coffeescript代码接受“Enter”按键以通过ajax提交表单

$(".text_field.comment").keypress (e) ->
  if e.which is 13    
    $(this).blur()
    form = $(this).closest("form")
    $.ajax
      url: form.attr('action')
      type: "PUT"
      dataType: "json"
      data: form.serialize()
    false

这里发生的是它反复发送请求近20次!必须采取哪些措施来阻止重复发送请求?

愚蠢的我!答案在于我的控制器。在我有这个之前:

class AnswersController < ApplicationController
  before_filter :authenticate_user!

  def update
    @answer = Answer.find(params[:id])
    if @answer.update_attributes(params[:answer])
      redirect_to(@answer,
        :notice => I18n.t('answer.notice'))
    else
      flash[:error] = @answer.errors.full_messages.to_sentence
      redirect_to @answer
    end 
  end 
end

然后我改为:

class AnswersController < ApplicationController
  before_filter :authenticate_user!

  def update
    @answer = Answer.find(params[:id])

    respond_to do |format|
      if @answer.update_attributes(params[:answer])
        format.json { render :json => @answer }
      else
        format.json { render :json => @answer.errors.full_messages.to_sentence } #output javascript messages
      end
    end
  end
end

重复请求的原因是因为它有一个循环请求“GET / answers / 1”

1 个答案:

答案 0 :(得分:0)

“当浏览器注册键盘输入时,按键事件被发送到元素。” - jQuery API

这对您的情况意味着您经常遇到键盘输入并运行该功能。我相信你所追求的是keyup

$(".text_field.comment").keyup (e) ->