javascript 似乎没有从 Rails 源获取数据

问题描述 投票:0回答:1

我正在使用 dataTables 来显示一个漂亮的表格来显示各种信息。 javascript 成功地将轮询请求发送到数据库/网络服务器,但是 javascript 似乎没有获取任何当前数据。

这是我的控制器

class CommentsController < ApplicationController
  before_filter :authenticate_user!
  before_filter :get_current_user

  # GET /comments
  # GET /comments.json

  def get_current_user
    @user=current_user
  end

  def index
    @comments = @user.comments

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @comments }
    end
  end

查看:

<h1>Listing comments</h1>

<table id="comments_id" class="display">
<thead>
  <tr>
    <th>String</th>
    <th>secondString</th>
    <th></th>
    <th></th>
  </tr>
</thead>
<tbody>
</tbody>
</table>

<br />

<%= link_to 'New Comment', new_comment_path %>
<h1>Listing comments</h1>

<table id="comments_id" class="display">
<thead>
  <tr>
    <th>State</th>
    <th>Environment</th>
    <th>dns</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
</thead>
<tbody>
</tbody>
</table>

<br />

<%= link_to 'New Comment', new_comment_path %>
<h1>Listing comments</h1>

<table id="comments_id" class="display">
<thead>
  <tr>
    <th>State</th>
    <th>Environment</th>
    <th>dns</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
</thead>
<tbody>
</tbody>
</table>

<br />

<%= link_to 'New Comment', new_comment_path %>

comments.js:

function InitOverviewDataTable()
{
  oOverviewTable =$('#desktops_id').dataTable(
  {
    "bPaginate": true,
    "bJQueryUI": true,  // ThemeRoller-stöd
    "bLengthChange": false,
    "bFilter": false,
    "bSort": false,
    "bInfo": true,
    "bAutoWidth": true,
    "bProcessing": true,
    "iDisplayLength": 10,
    "sAjaxSource": 'desktops'
  });
}

function RefreshTable(tableId, urlData)
{
  $.getJSON(urlData, null, function( json )
  {
    table = $(tableId).dataTable();
    oSettings = table.fnSettings();

    table.fnClearTable(this);

    for (var i=0; i<json.aaData.length; i++)
    {
      table.oApi._fnAddData(oSettings, json.aaData[i]);
    }

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
    table.fnDraw();
  });
}

function AutoReload()
{
  RefreshTable('#desktops_id', 'desktops');

  setTimeout(function(){AutoReload();}, 3000);
}

$(document).ready(function () {
  InitOverviewDataTable();
  setTimeout(function(){AutoReload();}, 3000);
});

我看到数据库端推送了正确的查询:

Started GET "/comments" for 127.0.0.1 at 2013-01-22 18:46:16 -0500
Processing by CommentsController#index as JSON
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Comment Load (0.4ms)  SELECT "comments".* FROM "comments" WHERE "comments"."user_id" = 1
Completed 200 OK in 6ms (Views: 3.2ms | ActiveRecord: 0.9ms)

但是在 Firefox 的 Web 控制台上,我看到当它轮询时,没有检索到任何数据......并且当数据表卡在“正在加载数据”时

[19:04:37.395] GET http://localhost:3000/comments?_=1358899476292 [HTTP/1.1 200 OK  38ms]
[19:04:39.344] GET http://localhost:3000/comments [HTTP/1.1 304 Not Modified  15ms]
[19:04:42.360] GET http://localhost:3000/comments [HTTP/1.1 304 Not Modified  18ms]

感谢您的帮助

javascript ruby-on-rails polling ajax-polling
1个回答
0
投票

问题是来自服务器的 JSON 数据没有键

aaData
的值,因为您正在序列化
ActiveRecord
对象。

我通常会更改使用 DataTable 插件的方式,因为看起来您正在使用内部 API(例如

_fnAddData
),这可能会在以后的某个时间点随机失败。

相反,我会推荐 Ryan Bates 在其数据表上的 RailsCast #340 中展示的方法。这种方法对我来说非常有效,而且我从来没有遇到过问题。

© www.soinside.com 2019 - 2024. All rights reserved.