如何使用ajax将json对象传递给控制器​​?

时间:2013-02-14 07:11:44

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

我有一个json对象。我想通过传递这个值来创建一个新学生。如何使用轨道上的ruby中的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被视为新的.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

如何在控制器中创建功能?

3 个答案:

答案 0 :(得分:4)

试试这个网址:

 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

答案 1 :(得分:0)

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

现在您需要解析此JSON字符串:

How do I parse JSON with Ruby on Rails?

答案 2 :(得分:0)

我认为你的routes.rb有错路由,这就是为什么你idnew

应该是:

<强>的routes.rb

resources "students" 

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

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

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