rails 3 jquery button_to remote json not decoding

时间:2011-10-03 14:46:22

标签: jquery json ruby-on-rails-3.1

我在rails 3.1项目中使用jQuery。我使用了button_to:remote =>是的:

<%= button_to "View Examples", "#{requisition_assign_path(@req.id, category_row.id)}?show_examples=1", :remote => true, :method => 'get' %>

这可以很好地处理服务器,并在此处理:

   def show
    @assignment = Assignment.find params[:id]
    @tag = @assignment.assignee
    examples = []
    @tag.example[@tag.tag].each do |e|
      examples << {:id => e.id}
    end
    @examples_json = examples.to_json
    respond_to do |format|
      format.js {render "assign/show.js.erb"}
    end
  end

哪个叫show.js.erb就好了:

alert(jQuery.parseJSON("<%= @examples_json %>");

但是在浏览器中,文本到了,但我无法解析原始的哈希数组。我错过了什么?

----我可能缺少的只是使用jQuery的getJSON函数......

1 个答案:

答案 0 :(得分:1)

您可以发布此操作的日志吗?我使用内置的“远程”帮助程序时遇到的一个问题是它们在JS中请求内容,而不是JSON。使用当前的控制器代码,您将无法从$ .getJSON获得任何响应(您的控制器设置为仅响应JS)。您可以尝试在控制器顶部添加respond_to块

respond_to :html, :json

并且您的操作可能看起来像

def show
  @assignment = Assignment.find(params[:id])
  @tag = assignment.assignee
  @examples = []
  @tag.example[@tag.tag].each do |e|
    @examples << {:id => e.id}
  end
  respond_with(@examples)
end

如果你要求JSON内容,Rails 3默认的Responder会自动将@examples转换为JSON。您可以尝试使用通用的jQuery AJAX函数

jQuery.ajax({
  url: $(this).attr('href'),
  type: 'GET',
  dataType: 'JSON',
  success: function(data){
    json = jQuery.parseJSON(data.responseText);
    console.log(json);
  }
});

祝你好运!