使用AJAX post =>渲染了js文件,但div保持不变

时间:2014-09-17 13:14:15

标签: ruby-on-rails ajax post render

在我的Ruby on Rails应用程序中,我想在我的视图中使用id = table_div更改表,但是当我使用ajax post并想要渲染add_result_options.js.erb文件时,没有任何反应。 我有这个脚本

$.ajax({
 type : "POST",
          url :  'http://localhost:3000/systems/add_result_options',
          dataType: 'json',
          data :  { results : { name : array_results } }
});

在我的SystemsController中:

def add_result_options

    @resultOptions = params[:results]   

    respond_to do |format|
        format.html 
        format.js   { render :add_result_options }
    end
end

在我的add_result_options.js.erb文件中

$("#table_div").remove();

我的视图名为create.html.erb我有我想要更改的表

<table id="table_div">
     <tr>
            <th>Name</th>
            <th>Serial</th>
            .......
     </tr>
</table>

当在控制台中调用ajax时,我可以看到帖子已经运行但表中没有任何内容发生变化:

Processing by SystemsController#add_result_options as JSON
  Parameters: {"results"=>{"name"=>["name", "memory", ""]}}
  Rendered systems/add_result_options.js.erb (0.2ms)
Completed 200 OK in 3ms (Views: 1.8ms | ActiveRecord: 0.0ms)

谢谢

1 个答案:

答案 0 :(得分:0)

要将#tml添加到#table_div,您必须在Ajax调用完成后使用deferred来插入数据:

$.ajax({
    type : "POST",
    url :  'http://localhost:3000/systems/add_result_options',
    dataType: 'json',
    data :  { results : { name : array_results } }
    success: function(data) {
        $("#table_div").append(data);
        //Alternativly
        //$("#table_div").html(data);
    }
});

如果你想在javascript中渲染ruby代码,你必须像这样呈现javascript:

<强> view.html.erb

<script>
$.ajax({
    type : "POST",
    url :  'http://localhost:3000/systems/add_result_options',
    dataType: 'json',
    data :  { results : { name : array_results } }
    success: function(data) {
        $("#table_div").append(data);
        <% system = System.first %> 
        var system = <%= raw System %>; 
    }
});
</script>
<table id="table_div">
     <tr>
            <th>Name</th>
            <th>Serial</th>
            .......
     </tr>
</table>