2013-01-31 26 views
6

私はちょうどjsonで応答できないSinatraで問題が発生しています。どこでも良いsinatraドキュメントが見つかりません。ほとんどのものは古くなっているようです。Sinatra jsonのレンダリングが期待通りに機能しない

module MemcachedManager 
    class App < Sinatra::Base 
    register Sinatra::Contrib 
    helpers Sinatra::JSON 

    get '/' do 
     json({ hello: 'world' }) 
    end 
    end 
end 

MemcachedManager::App.run! if __FILE__ == $0 

私は得るかという応答は次のとおりです:それが唯一のJSON一部となっているはずです

"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>{\"hello\":\"world\"}</p></body></html>\n" 

とにかく、ここのコードです。なぜ私はそれを求めていないときにhtmlタグをレンダリングするのですか?

+0

はあなたには、いくつかのレイアウトが設定されていない:あなたはシナトラ-contribの宝石を使用している、とRuby以降など、これらすべての括弧を必要としないので、あなたはまた、あなたが一例として与えられたコードを簡素化することができます? – three

+0

@thiagofm - これに答えましたか? – iain

+0

@ iain not yet ... – thiagofm

答えて

6

content_type :json 

を入れてみてください、あなたはthis blog postを見たことがありますか?

require 'json' 

get '/example.json' do 
    content_type :json 
    { :key1 => 'value1', :key2 => 'value2' }.to_json 
end 

また、私はこれを修正します:ルートを使用してHTML/XML呼び出しを停止する

get '/example.json', :provides => :json do 

require 'sinatra/json' 

module MemcachedManager  
    class App < Sinatra::Base 
    helpers Sinatra::JSON 
    get '/', :provides => :json do 
     json hello: 'world' 
    end 
    end 
end 

MemcachedManager::App.run! if __FILE__ == $0 
+0

<!DOCTYPE html PUBLIC \ " - // W3C // DTD HTML 4.0 Transitional // EN \" \ "http://www.w3.org/TR/REC-html40/loose.dtd \"> n

{\ "hello \":\ "world \"}

\ n – thiagofm

+0

@thiagofmリクエストを行うために何を使用していますか? RSpec?カール?クロム…? – iain

+0

私はカピバラを使用しています。 – thiagofm

1

json(...)コール

+0

まだ動作しません。 – thiagofm

関連する問題