【问题标题】:How to pass json object to controller using ajax?如何使用ajax将json对象传递给控制器​​?
【发布时间】:2013-01-29 22:38:43
【问题描述】:

我有一个 json 对象。我想通过传递这个值来创建一个新学生。如何在 ruby​​ on rails 中使用 ajax 将该对象的值传递给控制器​​? 这是我用来传递对象的代码。

self.save = function() {
       var dataToSave = {
                    Name: self.firstName(),
                    _age: self.Age()
                 }
       alert(JSON.stringify(dataToSave))
         $.ajax({
        url: '/students/new',
        dataType: 'json',
        type: 'PUT',
        data: {total_changes: JSON.stringify(dataToSave)},
        success: function(data) {
            alert("Successful");
          },
          failure: function() {
            alert("Unsuccessful");
          }
        });
       // TODO send request
  };

}

我 终端有一些错误。它显示了

Parameters: {"id"=>"new", "total_changes"=>"{\"Name\":\"hu\",\"_age\":\"7\"}"}

id 被当作 new.Rake 路由

[nithinv@ast297 jquery_country]$ rake routes
     students GET    /students(.:format)          students#index
              POST   /students(.:format)          students#create
  new_student GET    /students/new(.:format)      students#new
 edit_student GET    /students/:id/edit(.:format) students#edit
      student GET    /students/:id(.:format)      students#show
              PUT    /students/:id(.:format)      students#update
              DELETE /students/:id(.:format)      students#destroy

控制器是

def new
    @student = Student.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render :json => @student }
    end
  end

如何在控制器中创建函数?

【问题讨论】:

    标签: ruby ajax ruby-on-rails-3 json ruby-on-rails-3.2


    【解决方案1】:

    试试这个网址:

     alert(JSON.stringify(dataToSave))
         $.ajax({
        url: '/students',
        dataType: 'json',
        type: 'PUT',
        data: {total_changes: JSON.stringify(dataToSave)},
        success: function(data) {
            alert("Successful");
          },
          failure: function() {
            alert("Unsuccessful");
          }
        });
    

    将网址更改为 /students

    【讨论】:

      【解决方案2】:

      我认为您的 routes.rb 路由错误,这就是为什么您将 id 设为 new

      应该是:

      routes.rb

      resources "students" 
      
      match "/students/new" => "students#new"
      

      这将在您的students 控制器中调用new 操作。所以这取决于new 操作在students 控制器中的代码。

      您的其余代码似乎是正确的。但是,如果您仍然收到错误消息,请进一步显示您收到的错误消息以及 new 操作代码。

      【讨论】:

      • 是的,它是正确的,将调用学生控制器的新动作。
      • 我根据您的建议编辑了我的代码,但终端仍然显示参数:{"id"=>"new", "total_changes"=>"{\"Name\":\"yut\" ,\"_age\":\"6\"}"} id='new'....
      • 还有这样的错误 ActiveRecord::RecordNotFound (Couldn't find Student with id=new):
      • 通过运行rake routes |grep students向学生显示您的路线
      • [nithinv@ast297 jquery_country]$ rake routes students GET /students(.:format) students#index POST /students(.:format) students#create new_student GET /students/new(.:format ) 学生#new edit_student GET /students/:id/edit(.:format) 学生#edit student GET /students/:id(.:format) 学生#show PUT /students/:id(.:format) 学生#update删除 /students/:id(.:format) students#destroy
      【解决方案3】:

      它完全按照您的要求执行 - 将 JSON 对象转换为有效的字符串表示形式。

      现在你需要解析这个 JSON 字符串:

      How do I parse JSON with Ruby on Rails?

      【讨论】:

        猜你喜欢
        • 2018-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        相关资源
        最近更新 更多