【问题标题】:ruby, sinatra, Plivo API: render API call as HTMLruby、sinatra、Plivo API:将 API 调用渲染为 HTML
【发布时间】:2013-08-20 10:01:23
【问题描述】:

我正在对 Plivo 进行 API 调用以列出可用的电话号码。

我可以访问返回的响应并在终端中打印所需的元素,但我不知道如何在我的网页上将它们呈现为 HTML。这是我的问题。

在终端中,调用成功的响应是:

  {"api_id"=>"23f1f0f0-0808-11e3-a442-22000ac6194a",
 "meta"=>
  {"limit"=>1, "next"=>nil, "offset"=>0, "previous"=>nil, "total_count"=>1},
 "objects"=>
  [{"group_id"=>"23928520636825",
    "number_type"=>"local",
    "prefix"=>"646",
    "region"=>"New York, UNITED STATES",
    "rental_rate"=>"0.80000",
    "resource_uri"=>
     "/v1/Account/MAZDQ1ZJIYMDZKMMZKYM/AvailableNumberGroup/23928520636825/",
    "setup_rate"=>"0.00000",
    "sms_enabled"=>true,
    "sms_rate"=>"0.00800",
    "stock"=>50,
    "voice_enabled"=>true,
    "voice_rate"=>"0.00900"}]}
"0.00900"
New York, UNITED STATES
646

生成响应的 Ajax 脚本是:

$(".localsearch").click(function() {
    var country_iso = $("#local").val();
    var region = $("#region").val();
    var prefix = $("#prefix").val();
    $.ajax({
    type: "GET",
    url: "/local/data",
    data: { 'country_iso' : country_iso,  'region' : region,  'prefix' : prefix },
    success: function(data) { 
    alert(data)
            },
     });
 });

警报没有帮助,只是显示整个页面。

ruby 代码是:

get '/local/data' do
      country_iso =  params[:country_iso]
      region = params[:region]
      prefix = params[:prefix]
      p = RestAPI.new(AUTH_ID, AUTH_TOKEN)
      params = {'country_iso' => country_iso, 'region' => region, 'prefix' => prefix, 'limit' => '1'}
      response = p.get_number_group(params)
      obj = response.last
      pp response.last 
      @region = obj["objects"][0]["region"]
      puts @region
      @prefix = obj["objects"][0]["prefix"]
      puts @prefix
     erb :search
end

所以,很抱歉,它很长,总结一下,我如何从 API 响应中提取元素并将它们打印为 HTML?提前谢谢了。

在我尝试过的视图中:

<%= @region %><%= obj['region'] %><%= obj['objects][0]['region'] %> 并且它们都不起作用。

【问题讨论】:

    标签: ruby sinatra plivo


    【解决方案1】:

    Yours 是通过 ajax 调用呈现部分的完美用例。 所以你可以做的是:

    1. 使您的 Sinatra 操作返回 html,使用 rails 像这样渲染部分功能 http://steve.dynedge.co.uk/2010/04/14/render-rails-style-partials-in-sinatra/ (要在 sinatra 中获得类似部分功能的 rails,您也可以使用这个 gem https://rubygems.org/gems/sinatra-partial

    2. 现在你的 sinatra 操作返回一个有效的 html,在你的 ajax 成功函数中你可以写:

      $(".localsearch").click(function() {
      var country_iso = $("#local").val();
      var region = $("#region").val();
      var prefix = $("#prefix").val();
      $.ajax({
         type: "GET",
         url: "/local/data",
         data: { 'country_iso' : country_iso,  'region' : region,  'prefix' : prefix },
         success: function(data) { 
            $('unique_identifier_of_your_partial_on_the_html_dom').html(response)
         }
      });
      

      });

    另一个在 sinatra 中渲染局部的例子: Ruby w/ Sinatra: Could I have an example of a jQuery AJAX request?

    提取出你想用这个ajax调用的响应填充的html到一个单独的erb文件中,比如说_my_response_partial.html.erb 现在假设这是您的 search.html.erb 文件。

    #something somrthing
    <%= erb(:my_response_partial, locals => {:region => @region, :prefix => @prefix},:layout => false) %> #pass whatever data you want to pass to a partial using locales
    # something something
    

    并在您的 get 操作中将最后一行替换为:

    erb(:my_response_partial, locals => {:region => @region, :prefix => @prefix},:layout => false)
    

    通过这种方式,您的操作将只返回填充该部分所需的 html。

    【讨论】:

    • 对不起,这比我的工资等级高一点。您是说我应该将 erb 重命名为 erb :search, :layout => false?我在搜索视图页面中放置什么来打印 Html?谢谢!
    • 恐怕我遇到了问题:使用您上面描述的方法在占位符中重复了整个HTML页面。
    • 相信我这不超过你的工资等级:)。通过替换 get 操作中返回的 html,您已经完成了一半。您需要做的就是只返回您需要填充的那部分 html,而不是完整的 search.html.erb 。我已经更新了我的答案。如果您仍然遇到任何问题,请告诉我。
    • 只需确保您的部分名称以_开头
    • 谢谢,我很抱歉我试图理解这一点。你能再具体一点吗? $('unique_identfier etc') 表示 div 的类或 id,例如?所以:$("#results").html(response)?而“-”表示在 ruby​​ 代码 sn-p 中,我输入了 erb :_search, layout => false ?你是这个意思吗?但实际上 erb 的名称只是 search.erb 而不是 _search.erb?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2017-04-17
    • 2019-06-12
    • 1970-01-01
    • 2021-07-06
    • 2011-12-21
    相关资源
    最近更新 更多