1

我正在对 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)
            },
     });
 });

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

红宝石代码是:

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'] %>不起作用。

4

1 回答 1

0

你的是通过 ajax 调用渲染部分的完美用例。所以你可以做的是:

  1. 使您的 Sinatra 操作返回 html,使用像这样的渲染部分功能 http://steve.dynedge.co.uk/2010/04/14/render-rails-style-partials-in-sinatra/ (获得像 partial sinatra 中的功能,您也可以使用此 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:我可以举一个 jQuery AJAX 请求的示例吗?

将要使用此 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。

于 2013-08-18T14:44:30.283 回答