Can I render an image with json?

Joe Morano

I'm using Typeahead to render instances of my "User" model in a drop-down list:

Controller:

def typeahead
  render json: User.where(name: params[:query])
end

View:

<input type="text" id="typeahead">
<script type="text/javascript">
  var bloodhound = new Bloodhound({
    datumTokenizer: function (d) {
      return Bloodhound.tokenizers.whitespace(d.value);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,

    remote: '/typeahead/%QUERY', 
    limit: 50
  });
  bloodhound.initialize();

  $('#typeahead').typeahead(null, {
    displayKey: 'name',
    source: bloodhound.ttAdapter()
  });

  $('#typeahead').bind('typeahead:selected', function(event, datum, name) {
    doSomething(datum.id);
  });
</script>

This code causes a list of User.names to drop down as I type.

Can I render an image, in this case User.avatar.url(:thumb)? When I change displayKey: 'name', to displayKey: 'avatar.url(:thumb)', the drop-down list simply says "undefined" for every User.

[I made sure that User.avatar.url(:thumb) displays successfully elsewhere]

Benj

You need to encode the image as base64 on your server, then return the resulting string in your json response, and finally on the client side use this base64 string to populate your image

1- server side: encode image as base64

def typeahead
  users = User.where(name: params[:query])

  json = users.collect do |user|
    path = user.avatar.url(:thumb)
    image = open(path) { |io| io.read }
    base64 = ActiveSupport::Base64.encode64(image)

    {id: user.id, name: user.name, base64: base64}
  end

  render json: json
end

2- Client side: use templating to populate users name and image

$('#typeahead').typeahead(null, {
  displayKey: 'name',
  source: bloodhound.ttAdapter()
  templates: {
    suggestion: Handlebars.compile('<p><img src="data:image/png;base64,{{base64}}">{{name}}</p>')
  }
});

Note1: not tested, you may have to do little adjustments

Note2: This will require a lot of power from your server when you have a big users table and a lot of concurrent connections, because the server would have to open and encode many image files for each query.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How can I efficiently render an image in Django?

From Dev

How can i render a particular JSON data?

From Dev

How can I render a watermark image in my highchart from local directory?

From Dev

How can I render one image over another in react-native?

From Dev

How can I render a watermark image in my highchart from local directory?

From Dev

How can I use image form json response using angularjs?

From Dev

How can I upload image with JSON parameters with Alamofire in Swift?

From Dev

How can I produce json response with image url

From Dev

how can I render an HTML page with express and at the same time pass json data to that HTML?

From Java

How can I render repeating React elements?

From Dev

How can I render a component that implements an interface?

From Dev

Why can't I render this angularJS code?

From Dev

How can i render valid html with JQuery?

From Dev

How can I get this Django template to render?

From Dev

How can I render a shiny datatables as a link

From Dev

Can I render text/plain content as it arrives?

From Dev

How can I render a SCNScene to a texture

From Dev

Can I render multiple sources in EJS

From Dev

How can I render a ColumnChart slider

From Dev

can I render SpriteBatch using PerspectiveCamera in libGDX?

From Dev

I can't render a post form for

From Dev

How can I render multiple draw modes?

From Dev

Can I render text/plain content as it arrives?

From Dev

Can I render multiple sources in EJS

From Dev

Can I render this collection without using .each()?

From Dev

How can I render a POSIXlt in R Markdown?

From Dev

How can I render realistic in A-Frame

From Dev

How can I render {%%} of Markdown in Jekyll?

From Dev

Can't render the image when setting its url in code behind

Related Related

  1. 1

    How can I efficiently render an image in Django?

  2. 2

    How can i render a particular JSON data?

  3. 3

    How can I render a watermark image in my highchart from local directory?

  4. 4

    How can I render one image over another in react-native?

  5. 5

    How can I render a watermark image in my highchart from local directory?

  6. 6

    How can I use image form json response using angularjs?

  7. 7

    How can I upload image with JSON parameters with Alamofire in Swift?

  8. 8

    How can I produce json response with image url

  9. 9

    how can I render an HTML page with express and at the same time pass json data to that HTML?

  10. 10

    How can I render repeating React elements?

  11. 11

    How can I render a component that implements an interface?

  12. 12

    Why can't I render this angularJS code?

  13. 13

    How can i render valid html with JQuery?

  14. 14

    How can I get this Django template to render?

  15. 15

    How can I render a shiny datatables as a link

  16. 16

    Can I render text/plain content as it arrives?

  17. 17

    How can I render a SCNScene to a texture

  18. 18

    Can I render multiple sources in EJS

  19. 19

    How can I render a ColumnChart slider

  20. 20

    can I render SpriteBatch using PerspectiveCamera in libGDX?

  21. 21

    I can't render a post form for

  22. 22

    How can I render multiple draw modes?

  23. 23

    Can I render text/plain content as it arrives?

  24. 24

    Can I render multiple sources in EJS

  25. 25

    Can I render this collection without using .each()?

  26. 26

    How can I render a POSIXlt in R Markdown?

  27. 27

    How can I render realistic in A-Frame

  28. 28

    How can I render {%%} of Markdown in Jekyll?

  29. 29

    Can't render the image when setting its url in code behind

HotTag

Archive