如何将json响应传递回客户端

问题描述:

在我的Ruby on Rails代码中,我想将json响应发送回客户端。由于我是红宝石新手,我不知道我该怎么做。我想送error = 1 and success = 0为JSON数据,如果数据不保存到数据库中,如果它成功地保存它应该发送success = 1 and error = 0请参考下面如何将json响应传递回客户端

这里是我的控制器

class ContactsController < ApplicationController 
    respond_to :json, :html 
    def contacts 
    error = 0 
    success = 1 

    @contacts = Contact.new(params[:contact]) 

    if @contacts.save 
     respond_to do |format| 
     format.json { render :json => @result.to_json } 
     end 
    else 
     render "new" 
    end 
    end 
end 

我的代码这里是我的javascript代码

$('.signupbutton').click(function(e) { 
     e.preventDefault(); 
     var data = $('#updatesBig').serialize(); 
     var url = 'contacts'; 
     console.log(data); 
     $.ajax({ 
      type: 'POST', 
      url: url, 
      data: data, 
      dataType: 'json', 
      success: function(data) { 
       console.log(data); 
      } 
     }); 
    }); 
+0

查找到 “的respond_to做|格式|”因为这是你通常对不同的请求格式,html,xml,json等的响应。 – railsdog 2012-07-13 11:42:51

+0

@railsdog我将这段代码添加到我的代码中if @ contacts.save respond_to do | format | format.json {render:json => @ result.to_json} end else render“new” end'但这不起作用。它甚至没有显示任何错误。 – 2619 2012-07-13 11:43:56

+0

我想你会很难得到这个AJAX请求来触发'contacts'控制器中的'contacts'动作。 我认为这是值得看看Rails指南路由 - http://guides.rubyonrails.org/routing.html – mylescarrick 2012-07-13 11:46:37

有吨的其他优雅的方式,但这是正确的:

class ContactsController < ApplicationController 

    def contacts 
    @contacts = Contact.new(params[:contact]) 
    if @contacts.save 
     render :json => { :error => 0, :success => 1 } 
    else 
     render :json => { :error => 1, :success => 0 } 
    end 
    end 

end 

另外添加一个route.rb的路由。如果您需要使用html响应,则必须包含respond_to do | format |。

你要调整你的路线,接受JSON数据

match   'yoururl' => "contacts#contacts", :format => :json 

然后它会工作