0

私は次のことをしたい: クライアント (別のドメインから、現在はローカル コンピューター上の JQuery-Script) が Ajax-Post をサーバーに送信し、サーバーは結果をサーバーに保存し、HTML/テキストを送信します。それを HTML に挿入するクライアント。

これは Ajax 呼び出しです。

  var params = '{"comment": "Test", "creator": "Prof Frick", "name":     "Rainer", "url": "' + url + '"}';
  alert(params);
  $.ajax({
    type: "post",
    data: params,
    url: 'http://localhost:3000/pages/postjson/',
    success: function(data) {
      $('h1').html(data);
    }
  });
});

これは私のルートです:

match '/pages/postjson/' => 'pages#postjson'

そして、これはコントローラーです:

  def postjson
    parsed_json = ActiveSupport::JSON.decode(request.body.read) #
    @page = Page.where(:url => parsed_json["url"])
    new_obj = Page.new
    new_obj.name = parsed_json["name"]
    new_obj.creator = parsed_json["creator"]
    new_obj.url = parsed_json["url"]
    new_obj.comment = parsed_json["comment"]
    new_obj.save    
    render :json => @page[:name]
  end

私の間違いは非常に基本的なものだと思います。あなたの助けに本当に感謝しています。私の推測では、間違いは次のいずれかにある

    @page = Page.where(:url => parsed_json["url"])

またはで

    render :json => @page[:name]

すべてが完了するため、json-dataが保存され、ブラウザは「成功」と警告しますが、投稿したいものは消えます。

アドバイスありがとうございます。一般的なコーディングのヒントも常に高く評価されています!

4

2 に答える 2

1

私はついにパズルを解きました(私にとって):

たくさん読んだ後、このチュートリアルを見つけました

コントローラーを次のように変更しました。

respond_to do |format|
  format.js  { render :json => @page, :callback => params[:callback] }

そして、私の JQuery 関数は次のようになります。

$(document).ready(function() {
  $.ajax({
    type: "GET",
    processData: false,
    contentType: "application/json",
    dataType: "jsonp",
    url: 'http://localhost:3000/pages/postjson.js?callback=?',
    success: function(data) {
      $('h1').html(data.name);
      alert("Name: "+ data['name']);
    }
  });
});

それが最終的に機能することをとても嬉しく思います:)

于 2012-06-16T19:38:42.493 に答える
0

使用render :json => somethingすると、json オブジェクトが応答として取得されます。この場合に必要なのは、render :js呼び出される および ビューpostjson.js.erbです (ERB を使用していると仮定します)。そのビューでは、必要な JavaScript コードを記述して、HTML を思い通りに操作する必要があります。

于 2012-06-09T00:44:53.717 に答える