Rails无法将AJAX数据发送到控制器

时间:2016-07-12 17:35:15

标签: javascript html ruby-on-rails ruby ajax

我是一名AJAX新秀,所以请耐心等待。我试图将数据从聊天消息框发送到两个地方 - 实际聊天框和rails方法。这样我就可以显示meesage,并将消息存储在我的数据库中。

我有以下JS / HTML代码

<button onclick="myFunction()" name="submitmsg" type="submit"  id="submitmsg" value="Send">Try it</button>

<script>
  function myFunction() {
      var x = document.getElementById("frm1");
      console.log(x);
      var text = "";
      var i;
      for (i = 0; i < x.length ;i++) {
          text += x.elements[i].value + "<br>";
      }
      document.getElementById("chatbox").innerHTML += text;

      $.ajax({
            url : "/messages/create",
            type : "post",
            data : { data_value: x }
            dataType : "text" //this might be wrong?
      });

  }
</script>

我可以成功插入HTML DOM,但它不会将数据发送到消息控制器create操作。我的消息控制器名为messsages_controller.rb,操作为create

我已在debugger操作中添加create,以便随后查看params是什么,但它甚至从未执行过代码。

一些路线:

   messages GET    /messages(.:format)            messages#index
            POST   /messages(.:format)            messages#create
   new_message GET    /messages/new(.:format)        messages#new
  edit_message GET    /messages/:id/edit(.:format)   messages#edit
       message GET    /messages/:id(.:format)        messages#show
               PATCH  /messages/:id(.:format)        messages#update
               PUT    /messages/:id(.:format)        messages#update
               DELETE /messages/:id(.:format)        messages#destroy

更新

等等,我的JS代码有问题。它之前是将HTML插入到DOM中,但在调整它的某个地方停止了。现在控制台抛出错误new:110 Uncaught SyntaxError: Unexpected identifier第110行被注释掉了。

当我.ajax调用该函数时,它运行正常。当我在.ajax

中调用myFunction()函数时,我的语法错误

1 个答案:

答案 0 :(得分:1)

$.ajax({
  url : "/messages", //by rails convention doing a post simply to '/messages' should be handled by create action
  method : "post",
  data : { data_value: x },
  dataType : "json", //this might be wrong?
  success: function(response){
    //do something,maybe notify user successfully posted their message
  },
  error: function(error){
    console.log(error);
  }
});

在您的create方法中,您应该处理json次请求

def create
  //save message
  @message.save!
  respond_to do |format|
    format.json { json: @message.as_json }
  end
end

这就是你的代码应该是这样的。你总是可以创造性地做得更好。

请查看此gist