2012-01-16 110 views
1

我已经浏览了相当多的问题 - 但是,我仍然感到困惑。如何发送邮寄请求并接收json回来的铁轨

我正在制作一个与Healthgraph API连接的Rails应用程序(此处为http://developer.runkeeper.com/healthgraph/registration-authorization)。

我应该通过Rails发出一个POST请求 - 基于一个参数我收到然后收到JSON。我已经尝试了outh2,runkeeper和其他宝石,他们不工作,因为有一定的依赖性。但是,我迷失于如何通过Rails进行POST并收到响应。

我确实把代码拿回了我的控制器 - 但是,我仍然不知道如何获得访问令牌。

高清rktest

respond_to 

if params[:code] 
    require 'oauth2' 

    @code=params[:code] 

    @cc_id=client_id 
    @client_s=client_secret 

else 

    @code="None" 

end 

我试图通过Javascript也做到这一点 - 但我宁愿不要 - 因为它离开我的裸露端密钥。另外,我也没有收到数据。

<script type="text/javascript" src="javascripts/jquery-1.7.1.min.js"></script> 

<script type="text/javascript"> 

function get_access_token(code,ccid,cc_s){ 

$.ajaxSetup({ 
'beforeSend': function(xhr){ 
xhr.setRequestHeader("Accept", "text/javascript") 
} 
}); 

var sent = { 'grant_type': 'authorization_code', 
'code': code, 
'client_id': ccid, 
'client_secret': cc_s, 
'redirect_uri': 'http://myurl.com/rktest' 
}; 

document.write("<p>" + sent + "</p>"); 

$.ajax({ 
url: 'https://runkeeper.com/apps/token', 
data: sent, 
type: 'POST', 
dataType: 'json', 
success: function(data, status, xhr){ 
if (status === 'error' || !xhr.responseText){ 
handleError(); 
}else{ 

document.write("<p>" + data + "</p>"); 
document.write("<p>" + status + "</p>"); 
document.write("<p>" + xhr + "</p>"); 

} 
} 
}); 

} 

<%= 'get_access_token(\''[email protected]+'\',\''[email protected]_id+'\',\''[email protected]_s+'\');' %>     

而且,这里是目前我的路线文件:

match '/rktest', :to => 'main#rktest', :via => [:get, :post] 

即使这是行不通的。

RestClient.post 'https://runkeeper.com/apps/token', {:params => { 
    :grant_type => 'authorization_code', 
    :code => @code, 
    :client_id => '8e9b36478b764ac38ef1bdabc6d14d60', 
    :client_secret => something, 
:redirect_uri => "http%3A%2F%2Fopenhealthdesigns.com%2Frktest"}} 

回答

0

我使用respond_to :json在,我希望返回JSON的方法与respond_with @notes控制器文件的顶部,并且效果很好。

该应用程序使用Ajax来返回搜索功能的数据,但我不认为数据如何被调用应该有所作为。

豆蔻上下文更多的代码:

class NotesController < ApplicationController 
    require 'coderay' 
    respond_to :json                                                   


def search 
    @notes = Note.fulltext_search(params[:title]) 
    @notes.each do |n| 
    n.content = CodeRay.scan(n.content, :ruby).div(:css => :class) 
    end 
    respond_with @notes 
end 

API文件 - 这取决于如何该方法将被调用。如果使用.json,respond_to块也可以。

respond_with

respond_to

+0

IM困惑,你是什么意思?你在哪里发布到外部服务器? – econclicks 2012-01-16 21:12:09

+0

这实际上是一个get请求,但请求的类型应该不重要。我向您展示了我如何在Rails 3.1应用程序中返回json。如果您将respond_to:json行放入您的文件并使用respond_with ,它将返回json。 – 2012-01-17 04:45:25