如何回应Rails中的AJAX表单提交?

时间:2012-02-12 19:52:52

标签: jquery ajax json forms coffeescript

以下是我用HTML制作的一个简单的“告诉朋友”表单,它正确地将数据发布回我的服务器并正确提交。

这是javascript代码(它在CoffeeScript中):

$('#tell-a-friend-form').submit (e) ->
    e.preventDefault()
    console.log "submitted form."

    $.ajax
      url: 'home/tellafriend'
      type: 'POST'  
      data:
        name: $(this).find("input[name='name']").val()
        emails: $(this).find("input[name='emails']").val()
        message: $(this).find("textarea[name='message']").val()
      success: (result) ->
        alert("ok")
        $('#tell-a-friend-form').find(".loading-icon").hide()
      error: (result) ->
        alert("Sorry, we couldn't send your message.")    
        $('#tell-a-friend-form').find(".loading-icon").hide()
        $('.tell-a-friend-submit').removeAttr("disabled")

    $(this).find(".tell-a-friend-submit").attr("disabled", "disabled")
    $(this).find(".loading-icon").show()

现在,在Controller中,我根本不需要返回任何消息,除了可能是“发送ok”类型的布尔值,因此客户端javascript可以知道是“成功”还是“错误”。 / p>

目前,客户端每次都会触发“错误”。

这是我的控制器代码:

def tellafriend
  #send the actual email message. to be implemented.

  respond_to do |format|
    format.json { render :json => "success" }
  end
end

我在控制器方面做错了什么?我确定问题出在这里。如果我希望触发“成功”位,我需要返回什么?

1 个答案:

答案 0 :(得分:2)

您提出请求时,您的日志会显示什么?这对于诊断此类事物非常重要。我能想到的有三件事通常可以解决这个问题:

明确请求JSON

它可能就像从AJAX调用中明确请求JSON一样简单:

$.ajax
  url: 'home/tellafriend'
  type: 'POST'
  dataType: 'json'
  ...

检查您的路线:

您的路线可能未配置为响应POST请求。确保您的'tellafriend'路线接受邮寄。作为快速检查,您可以将您的AJAX请求更改为“GET”或访问/home/tellafriend.json

返回有效对象

而不是简单地返回“成功”您可能想要尝试返回实际对象:

respond_to do |format|
  format.json { render :json => {:message => "success"} }
end