2014-09-04 73 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