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-Function 看起来像这样:

$(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 回答