使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?

Posted

技术标签:

【中文标题】使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?【英文标题】:Using ruby, Sinatra and Mandrill how can I access individal elements from an api call and print as HTML? 【发布时间】:2014-03-03 00:17:34 【问题描述】:

我想将返回的 JSON 对象中的元素打印为 html。红宝石代码是:

get '/get_template_info' do
    mandrill = Mandrill::API.new  
    name = "blah"
    result = mandrill.templates.info name
end

jQuery 是:

$(document).ready(function()
$( ".result" ).on( "click", "#edit_template", function() 
$.getJSON("/get_template_info?name=blah", function(data) 
  $.each( data, function( key, value ) 
         var template_txt = '<p>' + this["code"] + '</p>';
        $(".edit_div").append(template_txt);
                            );//end each
            );//end json
    );//end click
);//end doc

在萤火虫控制台中,这是我得到的:

"slug":"blah","name":"blah","code":"blah is the message\r\n\r\n<p>and blah is how it is</p>\r\n<p> I hope it gets better soon </p>","publish_code":"blah is the message\r\n\r\n<p>and blah is how it is</p>\r\n<p> I hope it gets better soon </p>","published_at":"2014-02-06 03:36:04","created_at":"2014-02-05 09:08:06.73429","updated_at":"2014-02-06 03:36:04.28132","publish_name":"blah","labels":["mylabel"],"text":"example text","publish_text":"example text","subject":"this is a subect","publish_subject":"this is a subect","from_email":"rich@pchme.com","publish_from_email":"rich@pchme.com","from_name":"Rich","publish_from_name":"Rich"

但是 jQuery sn-p this["code'] 在 edit_div 中打印为“未定义”!

这里有什么问题吗?所有帮助表示赞赏。谢谢。

【问题讨论】:

【参考方案1】:

在您提供给$.each 的回调中,您的代码似乎希望thisdata 相同,但实际上它与value 相同。所以,如果你这样做这个

$(document).ready(function()
  $( ".result" ).on( "click", "#edit_template", function() 
    $.getJSON("/get_template_info?name=blah", function(data) 
      $.each( data, function( key, value ) 
        console.log(key + ":" + value);
      );
    );
  );
);

你会得到:

slug:blah VM770:2
name:blah VM770:2
code:blah is the message

<p>and blah is how it is</p>
<p> I hope it gets better soon </p> VM770:2
publish_code:blah is the message

<p>and blah is how it is</p>
<p> I hope it gets better soon </p> VM770:2
published_at:2014-02-06 03:36:04 VM770:2
created_at:2014-02-05 09:08:06.73429 VM770:2
updated_at:2014-02-06 03:36:04.28132 VM770:2
publish_name:blah VM770:2
...

在您的情况下,您将直接使用“代码”键,因此您可以这样做:

$(document).ready(function()
  $( ".result" ).on( "click", "#edit_template", function() 
    $.getJSON("/get_template_info?name=blah", function(data) 
      var template_txt = '<p>' + data["code"] + '</p>';
      $(".edit_div").append(template_txt);
    );
  );
);

【讨论】:

谢谢,我会试一试。事实上我已经解决了它(以不同的方式),但我会测试你的建议并恢复。感谢您的宝贵时间和帮助。

以上是关于使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?

Sinatra / Warden / Ruby - 如何确保我的用户只能使用单个会话登录?

在google appengine上部署ruby + sinatra应用程序

ruby Twilio Sinatra

ruby Sinatra API REST CRUD

ruby sinatra_test.rb