javascript - Rails 无法将 AJAX 数据发送到 Controller

标签 javascript html ruby-on-rails ruby ajax

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

我有以下 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,但它没有将数据发送到消息 Controller create 操作。我的消息 Controller 名为 messsages_controller.rb,操作为 create

我在 create 操作中添加了 debugger,以便查看 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: Unexpectedidentifier 第 110 行被注释掉。

当我从函数中调用 .ajax 时,它工作正常。当我在 myFunction()

中调用 .ajax 函数时,出现语法错误

最佳答案

$.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

关于javascript - Rails 无法将 AJAX 数据发送到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335562/

相关文章:

ruby-on-rails - Rails - 有什么方法可以为模型的 ActiveRecord::Relation 查询设置可重写的 "default"过滤器(即预运行类方法)?

ruby-on-rails - 带参数的rails自定义休息路线

ruby-on-rails - 编写 Rails 测试,不要保留那么多数据库对象

php - 如何记录网站的控制流程

javascript - 如何在 ajax 中获取从 Controller 返回的模型的值?

HTML 在 Bootstrap 中通过 div 类缩略图添加文本

html - Polyfill HTML5 表单属性(用于输入字段)

javascript - 攻击者能否在 html5 数据属性中插入恶意代码

javascript - 我的碰撞检测实现行为不正常

javascript - <Script> 标签内的 HTML 代码