2014-09-04 47 views
1

对不起,这是一个广泛的问题。我需要一些指导。Rails AJAX致电

我有这样的AJAX调用:

 $('#testyo').click(function(){ 
      $.ajax({ 
       type: 'GET', 
       url: "../messages/drew", 
       success:function(data){ 
       alert(data); 
       } 
      }); 
      return false; 
     }); 

调用该方法轨

def show 
    username = params[:id] 
    @client = Twilio::REST::Client.new Rails.application.config.account_sid, Rails.application.config.auth_token 
    @account = @client.account 
    received_messages = @account.messages.list 
    end 

它采用PARAMS“画”,只是作为一个测试,但我不知道该怎么将数据传回给ajax调用。警报(数据)不显示任何内容。我在某处错过了什么?

+0

use format.json 。并返回'@ account.messages.list'的json – 2014-09-04 07:16:19

+0

所以,只需在rails控制器的show方法结尾加上这个? format.json {render json:@ account.messages.list} – user3591126 2014-09-04 07:18:31

+0

更新了答案。看看它是否有效 – 2014-09-04 07:19:36

回答

2

MIME类型

如前所述,您将使用JSON这是最好的,但是,让我解释的方式哪个Rails会把你的数据传回去

当你将请求传递给任何Web应用程序,您的服务器/框架将必须确定该请求的mime type。 MIME类型基本上决定了请求的类型,无论是纯HTML还是JS一种等。

发送Ajax请求与发送“HTTP”请求基本相同,只是ajax变体会有不同的MIME类型。这可以让你适应你的应用程序的功能,以适应这一点(特别是与respond_to):

#app/controllers/messages_controller.rb 
class MessagesController < ApplicationController 
    respond_to :js, :json, :html, only: :show 
    def show 
     username = params[:id] 
     @client = Twilio::REST::Client.new Rails.application.config.account_sid, Rails.application.config.auth_token 
     @account = @client.account 
     respond_with @account.messages.list 
    end 
end 

这将相关数据发送回您启动与请求的MIME类型。要做到这一点,你必须确保你发送你想要的要求,让您处理响应,因为你需要:

#app/assets/javascripts/application.js 
$(document).on("click", "#testyo", function(){ 
    $.ajax({ 
      type: 'GET', 
      dataType: "JSON", 
      url: "../messages/drew", 
      success:function(data){ 
      alert(data); 
      } 
    }); 
    return false; 
}); 

阿贾克斯

你要记住Ajax如何处理请求/返回的数据。

它被称为Asynchronous Javascript and XML - 意思是它的意图是一种异步技术。

这意味着如果您通过Ajax发送请求,想法是您会收到一份数据的“部分”/“片段”,然后您可以将其添加到您的页面。当然,这取决于您的应用程序的结构,但底线是,如果您想从应用程序接收数据,则必须围绕要返回的数据设计ajax调用

1

尝试在您的节目结尾添加此项。

def show 
    username = params[:id] 
    @client = Twilio::REST::Client.new Rails.application.config.account_sid, Rails.application.config.auth_token 
    @account = @client.account 
    respond_to do |format| 
     format.html # show.html.erb AND if and only if you also want view of show 
     format.json { render :json => @account.messages.list } 
    end 
end 
0
respond_to do |format| 
    format.json { render :json => @account.messages.list, :status => 200 } 
end 
在你的Ajax调用

$('#testyo').click(function(){ 
     $.ajax({ 
      type: 'GET', 
      url: "../messages/drew", 
      dataType: 'json' 
      success:function(data){ 
      alert(data); 
      } 
     }); 
     return false; 
    }); 
+0

谢谢你的回应..我仍然没有得到警报。这是否意味着它没有成功? – user3591126 2014-09-04 07:28:16

+0

/drew是show方法需要的id:那就是我认为至少 – user3591126 2014-09-04 07:31:55

+0

你能更新你的日志吗? – 2014-09-04 07:37:33