ajax(jQuery)→cgiデータベース検索(Ruby)→ブラウザ表示ができない

イメージとしては商品検索のアプリケーションのようなもので、フォームに入力されたテキストを含む商品名と、そのイメージURLをデータベースから検索し、結果を表示する、といったものです。firebugではエラー表示がないので、cgi出力の形式やjQueryのレスポンスの受け方、表示の部分に問題があると推測しているのですが、何処が間違っているのか解りません。レスポンスがあるので、データベース検索の処理もうまくいっています。
コードをgistに貼付けたので、お手数ですがこちらをご覧になって頂き、ご指摘頂けませんでしょうか?
READMEファイルに補足情報を記載しています。
html,javascript→https://gist.github.com/2317913
cgi(Ruby) →https://gist.github.com/2317927
README →https://gist.github.com/2317970
何卒宜しくお願いします。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2012/04/06 19:50:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

ポイント500pt

ajax_db.rb の以下のくだり

print cgi.header({ "charset"=>"UTF-8" })
cgi.out("application/json") {res.to_json}

の二行を、こう、かな。

cgi.out ({ "type" => "application/json", "charset" => "UTF-8" }) {
    res.to_json
}



CGI クラスの out メソッドのソース。
https://github.com/ruby/ruby/blob/trunk/lib/cgi/core.rb

  def out(options = "text/html") # :yield:

    options = { "type" => options } if options.kind_of?(String)
    content = yield
    options["length"] = content.bytesize.to_s
    output = stdoutput
    output.binmode if defined? output.binmode
    output.print header(options)
    output.print content unless "HEAD" == env_table['REQUEST_METHOD']
  end

out メソッドの中で print header されているので、ヘッダが二重にレスポンスとして返り、json 形式にならなくなってるのが、きちんと動かない原因。

id:chucker34

ありがとうございます。動きました。レスポンスは一回で返さないといけないんですね。助かりました。

2012/04/06 20:05:10
  • id:chucker34
    もし可能でしたらajaxとRubyのやり取りの仕方で参考になりそうなURLもご教示頂けると助かります。
  • id:Lhankor_Mhy
    コールバック関数の初めでconsole.log(res)とすると、何が返ってくるのでしょう?
    あるいはfirebugのコンソールでJSONタブを開いてみた時、JSONになってますでしょうか?
  • id:chucker34
    Lhankor_Mhy さんタブですがHTMLになっていました。正常に動けばこのタブはJSONになるんですね。ご指摘ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません