将原型AJAX调用与RJS转换为jQuery

时间:2013-02-27 01:21:35

标签: jquery ruby-on-rails ajax prototypejs

我正在使用Prototype和RJS运行Rails 3.0应用程序。我想转换为只使用jQuery。

我的问题是

1。使用jQuery时是否可以完全摆脱RJS?

2。如果没有,我该如何转换以下内容:

我的 index.html.erb

中有以下DIV元素
<div id="students"></div>

我有 ajaxCalls.js.erb ,其中包含以下内容:

$.ajax({
    url: '<%=populate_students_path()%>',
    type: 'POST',
    data: 'authenticity_token=' + AUTH_TOKEN,
    dataType: 'html', // Consider changing to HTML if this doesnt work
    beforeSend: function (xhr) {
      xhr.setRequestHeader("Accept", "text/javascript");
    }
  }).done(function (data) {

    // TODO Populate table with populate function
    var users_table = $('#students').dataTable({
      'aData': data
    });
  });

我得到以下回复:

try {
populate("{\"54\":{\"section\":\"-\",\"filter_table_row_contents\":\"<td>\\n  c5leharf\\n</td>\\n<td>\\n  Lehar\\n</td>\\n<td>\\n  Franz}")
}

我有 populate.rjs ,其中包含:

page.call "populate", @students.to_json

可以调用以下内容,但我不确定:

function populate(json_data) {
  users_table.populate(json_data);
  users_table.render();
}

所以,这里的问题是**

如何正确渲染我的回复?如何从AJAX调用中检索的数据中删除populate函数?我如何获得普通的JSON?

编辑:Kaeros的答案很有效,我的控制器看起来像:

respond_to do |format|
  format.json { render :json => @students_data } 
end

1 个答案:

答案 0 :(得分:1)

你可以使用像你正在使用的ajax方法(期望来自服务器的json):

$.ajax({
    url: '<%=populate_students_path()%>',
    type: 'POST',
    data: 'authenticity_token=' + AUTH_TOKEN,
    dataType: 'json',
    beforeSend: function (xhr) {
      xhr.setRequestHeader("Accept", "text/javascript");
    }
  }).done(function (data) {
    //Do something with the data received as json
  });

在你的控制器方法中你只需要返回json。

respond_to do |format|
  format.json { render json: @some_instance_variable }
end