如何通过jquery/ajax将数据作为JSON对象发送和存储到rails?

如何通过jquery/ajax将数据作为JSON对象发送和存储到rails?,jquery,ruby-on-rails,ruby,ajax,json,Jquery,Ruby On Rails,Ruby,Ajax,Json,{问题更新} 我想向安装rails的服务器发送一些数据。我的数据采用JSON格式,例如: var JSONObject= { table1: { title: "Title of text", url: "Url of text" } } 我在cilent中使用以下代码: $.ajax({

{问题更新}

我想向安装rails的服务器发送一些数据。我的数据采用JSON格式,例如:

var JSONObject=  {
             table1: {
                      title: "Title of text",
                      url: "Url of text"
                      }
                  }
我在cilent中使用以下代码:

$.ajax({
            type: "POST",
            url : "http://webadress.com/table1",
            cache: false,
            data: JSONObject,
             statusCode: {

                 200:function() { alert("200"); },
                 202:function() { alert("202"); }
            },
            success: function() {  alert("Data Send!");},
            error: function(xhr){  alert("The error code is: "+xhr.statusText);}        
        });
在cilent中,存在以下代码:

def create
    @table1= Table1.new(:title => params[:title], :url => params[:url])

respond_to do |format|
  if @table1.save
    format.html { redirect_to(@table1, :notice => 'User was successfully created.') }
    format.xml  { render :xml => @table1, :status => :created, :location => @table1}
    format.json { render :json => @table1}
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
    format.json  { render :json => @user.errors, :status => :unprocessable_entity }
  end
   end
end
但它不起作用。 如何获取数据并将其存储在数据库中。我的意思是如何将每个元素放入不同的列中?

最佳实践

首先,您应该在else语句中响应json,因为如果无法保存Table1,您将得到406(不可接受)响应代码,这是不合适的。422(不可处理实体)是合适的

format.json  { render :json => @user.errors, :status => :unprocessable_entity }
解决方案

那么我认为错误在下面的陈述中

params[:table1]
1。如果您的数据是按照您所说的那样发送的,您可以这样做

@table1= Table1.new(:title => params[:title], :url => params[:url])
2.如果你想写干净的代码,你应该这样发送数据

table1: {
  title: "Title of text",
  url: "Url of text"
}
通过将数据包装到表1中,您无需更改任何内容。

最佳实践

首先,您应该在else语句中响应json,因为如果无法保存Table1,您将得到406(不可接受)响应代码,这是不合适的。422(不可处理实体)是合适的

format.json  { render :json => @user.errors, :status => :unprocessable_entity }
解决方案

那么我认为错误在下面的陈述中

params[:table1]
1。如果您的数据是按照您所说的那样发送的,您可以这样做

@table1= Table1.new(:title => params[:title], :url => params[:url])
2.如果你想写干净的代码,你应该这样发送数据

table1: {
  title: "Title of text",
  url: "Url of text"
}

通过将数据包装到表1中,您无需更改任何内容。

因为您将AJAX POST数据作为包装在键
表1
下的对象传递,所以您应该能够在Rails控制器的操作中读取对象作为
参数[:表1]
。您可以修改此行:

@table1= Table1.new(:title => params[:title], :url => params[:url])

此外,您还可以在最后添加一个故障保护条件,以避免
NoMethodError
如果
params[:table1]
不可用

@table1= Table1.new(:title => params[:title], :url => params[:url])\
         if params[:table1]
并进一步修改您的if条件

if @table1.save


希望这有帮助。:)

由于您将AJAX POST数据作为包装在键
table1
下的对象传递,因此您应该能够在Rails控制器的操作中将该对象作为
params[:table1]
读取。您可以修改此行:

@table1= Table1.new(:title => params[:title], :url => params[:url])

此外,您还可以在最后添加一个故障保护条件,以避免
NoMethodError
如果
params[:table1]
不可用

@table1= Table1.new(:title => params[:title], :url => params[:url])\
         if params[:table1]
并进一步修改您的if条件

if @table1.save


希望这有帮助。:)

因为这个问题已经问了很久了,我想我的回答对作者没有帮助,但我希望我能帮助其他有类似问题的人

我基本上替换了这个代码:

@table1= Table1.new(:title => params[:title], :url => params[:url])
用这个

@table1= Table1.new(params[:table1])
使用Firefox和Firebug(调试客户端/javascript)以及RailCast(调试RoR)帮助我调试并在代码中找到错误:

此链接也可能有助于:

由于这个问题已经问了很久了,我想我的回答对作者没有帮助,但我希望我能帮助其他有类似问题的人

我基本上替换了这个代码:

@table1= Table1.new(:title => params[:title], :url => params[:url])
用这个

@table1= Table1.new(params[:table1])
使用Firefox和Firebug(调试客户端/javascript)以及RailCast(调试RoR)帮助我调试并在代码中找到错误:

此链接也可能有助于:

很高兴听到它起作用了。你能证实这个答案吗?谢谢,我认为它会起作用,但它不起作用。问题是,我按照你写的做了所有的事情。但这并不可怕。我的代码位于var JSONObject={“page”:{“title”:“title of text”,“url”:“url of text”,“summary”:“aaaaa”}}$.ajax({type:“POST”,url:,cache:false,contentType:“application/json;”,数据:JSONObject,状态代码:{200:function(){alert(“200”);},202:function(){alert(“202”);},成功:function(){alert(“Working”);},错误:function(xhr){alert(“错误为:”+xhr.statusText);});然而,在下面的地址中,只创建了一个空数据。很高兴听到它起作用了。你能证实这个答案吗?谢谢,我认为它会起作用,但它不起作用。问题是,我按照你写的做了所有的事情。但这并不可怕。我的代码位于var JSONObject={“page”:{“title”:“title of text”,“url”:“url of text”,“summary”:“aaaaa”}}$.ajax({type:“POST”,url:,cache:false,contentType:“application/json;”,数据:JSONObject,状态代码:{200:function(){alert(“200”);},202:function(){alert(“202”);},成功:function(){alert(“Working”);},错误:function(xhr){alert(“错误为:”+xhr.statusText);});然而,在下面的地址中,只创建了一个空数据。您是否可以共享在Rails应用程序日志中可能看到的任何异常?如果您可以将其粘贴到并在此处共享链接,那就太好了。您可以共享您在Rails应用程序日志中可能看到的任何异常吗?如果你能将它粘贴到并在这里共享链接,那就太好了。