2013-06-19 43 views
1

相当多的链接,但我无法将所有信息拼凑在一起。在jQuery和Controller之间传递值Rails

我假设有一个控制器,一个视图和路由参与。

关于url和路由,我有通用的文​​件夹结构app/views/pages/home和app/controllers/pages_controller.rb。你能指导我,如果我正确地做路由和URL,也?

的routes.rb

get pages/get_aj //Don't know if this is what you put 

jQuery的

$.ajax({ 
type: 'get' 
url: '/pages/get_aj' //can someone confirm this is how you do it? 
dataType: "JSON" //I need to pass back values from the controller to JS. Do I use JSON? 
}).success(function(data){ 
     alert("returned " + data); 
}); 

//some other jQuery code that will depend on the data returned. 

pages_controller.rb

def get_aj 
    respond_to do |format| 
     format.json{render :json => "we got here" } //Do I return .js? 
    end 
end 

耙路由

pages_home GET /pages/home(.:format) pages#home 
pages_contact GET /pages/contact(.:format) pages#contact 
pages_get_aj GET /pages/get_aj(.:format) pages#get_aj 
+1

那么是什么问题? – Wahtever

+0

通用 - 它不起作用。我正在寻找确认,也许我忽略了一些细节,因为它没有返回值。我不知道,即使它正确地进入轨道。您的控制器中的 – Alexey

+1

将'format.json'更改为'format.js',并发布关于pages_controller和控制台消息的'rake routes' – Wahtever

回答

6

你的代码应该可以正常工作。你误解的最大的问题是JS警报的作用。它提示字符串,并且data是一个对象。看到这个JS小提琴:http://jsfiddle.net/YNeA3/

要检查来自JS的对象,使用console.log()而不是警报。这些将显示在您的浏览器控制台中。这是JS的基本面包和黄油调试工具。

我不确定你发送的JSON对象是什么样子,因为你应该渲染一个散列,而不是一个字符串。这是你的代码唯一真正的问题,我想。

此外,一个建议:如果这个控制器的行动只是为了Ajax你不必打扰respond_to块。我会指定状态。

def get_aj 
    data = {:message => "Alert this!"} 
    render :json => data, :status => :ok 
end 

现在,在您的JS:

$.ajax({ 
    type: 'GET', 
    url: '/pages/get_aj', 
    success: function(data,status,xhr){ 
    console.log(data); 
    alert(data.message); 
    }, 
    error: function(xhr,status,error){ 
    console.log(xhr); 
    alert(error); 
    } 
}); 

数据将是一个JS对象看,就像你发送的哈希值。

+0

console.log()的荣誉! – Alexey

+0

工程就像一个魅力! :) –