如何发送帖子请求并在rails中接收json

时间:2012-01-16 20:13:35

标签: javascript ruby-on-rails ruby-on-rails-3 json oauth

我已经查看了相当多的问题 - 然而,我仍然感到困惑。

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

我应该通过Rails发出一个POST请求 - 基于我收到的参数然后接收JSON。我已经尝试过outh2,runkeeper和其他宝石,但由于某种依赖性,它们无法正常工作。但是,我很失落如何通过Rails发布并收到回复。

我确实在我的控制器中找到了代码 - 但是,我仍然不知道如何获取访问令牌。

def 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(\''+@code+'\',\''+@cc_id+'\',\''+@cc_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"}}

2 个答案:

答案 0 :(得分:0)

我在我想要返回json的方法中使用respond_to :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

答案 1 :(得分:0)