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

问题描述:

我有一个json object.I想通过传递这个值来创建一个新学生。如何将这个对象的值传递给控制器​​,在rails上使用ajax进行ruby? 这是我用来传递对象的代码。如何使用Ajax将json对象传递给控制器​​?

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 
    }; 

} 

i 终端有一些错误。它显示

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

ID被视为new.Rake路线

[[email protected] 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 

我怎么能走在控制器创建功能?

试试这个网址:

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"); 
     } 
    }); 

更改网址/学生

它正是你要求它做的 - 将JSON对象转换成有效的字符串表示。

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

How do I parse JSON with Ruby on Rails?

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

它应该是:

的routes.rb

resources "students" 

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

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

其余的代码似乎是正确的。但是,如果您仍然收到错误消息,而不是显示您收到的错误消息,并且还会执行new操作代码。

+0

$阿贾克斯({ 网址: '/学生/新', 这是正确的 – Niths 2013-02-14 11:18:54

+0

是的,它是正确的,会吗?调用学生控制器的新动作 – 2013-02-14 11:45:30

+0

我用你的建议编辑了我的代码,但仍显示终端参数:{“id”=>“new”,“total_changes”=>“{\”Name \“:\”yut \ “,\”_ age \“:\”6 \“}”} id ='new'... – Niths 2013-02-14 11:47:57