【问题标题】:DataTables -> Ajax not working数据表-> Ajax 不工作
【发布时间】:2012-06-08 17:02:30
【问题描述】:

我正在尝试复制此功能:http://datatables.net/release-datatables/examples/api/row_details.html

例子提供了这个功能:

/* Formating function for row details */
function fnFormatDetails ( oTable, nTr )
{
    var aData = oTable.fnGetData( nTr );
    var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
    sOut += '<tr><td>Rendering engine:</td><td>'+aData[1]+' '+aData[4]+'</td></tr>';
    sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>';
    sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>';
    sOut += '</table>';

    return sOut;
}

我已经把这个函数改成这样了:

/* Formating function for row details */
function fnFormatDetails(oTable, nTr) {
    var aData = oTable.fnGetData(nTr);
    var sOut = jQuery.ajax({
        url: "ajax/order_history_orderlines.asp",
        type: 'post',
        data: { orderid: aData[1] },
        context: document.body
    });

    return sOut;
}

当通过 FireBug 进行调试时,我看到 ajax 响应一切正常。发出请求,请求成功,正在返回正确的信息。这是返回的内容:

<!-- Teplate for orderlines found in rs Record Set -->
<table cellpadding="5" cellspacing="0" border="0" style="padding-left: 50px;">

    <tr>
        <td>
            Quantity:
        </td>
        <td>
            1
        </td>
        <td>
            Description:
        </td>
        <td>
            48 Cans of drink
        </td>

        </tr>

</table>

但是,当我单击 [+] 按钮时,它会展开该行,但“详细信息”行永远不会使用从 ajax 请求返回的表进行更新。

当我使用示例中的所有内容和 sOut = &lt;table&gt; 等时,它可以工作。当我切换它以获取 ajax 请求时,它会停止工作并出现 0 个错误。

谁能看到我在这里遗漏了什么?

【问题讨论】:

  • 您是否将 ajax 查询的结果放在任何地方?
  • @jeschafe 我不确定你问的是放置它们的哪个部分。在 DataTables 示例中,该函数返回 sOut,然后应该使用来自 sOut 的返回填充 &lt;td class="details"&gt;。如果您询问 Ajax 请求的响应是什么,请参见上面的代码块 &lt;!-- Teplate for orderliens found in rs Record Set --&gt;
  • 对,我明白了@Erik philips 在下面提出的观点。在上面的第一个函数中,它只是设置一个字符串文字以插入为 html。当您执行 ajax 时,它的格式必须相同,但您插入的是回调中返回的数据,而不是实际的 ajax 对象。

标签: jquery datatables


【解决方案1】:

您的代码不正确:

var sOut = jQuery.ajax({
    url: "ajax/order_history_orderlines.asp",
    type: 'post',
    data: { orderid: aData[1] },
    context: document.body
});

jQuery.ajax() 不返回数据,它返回jqXHR 对象。您需要使用 success 回调功能在成功的 ajax 调用上填充数据。

var sOut = jQuery.ajax({
    url: "ajax/order_history_orderlines.asp",
    type: 'post',
    data: { orderid: aData[1] },
    context: document.body,
    success: function(data, textStatus, jqXHR)
    {
      // do something with data(json object returned by call)
    }
});

【讨论】:

  • 我感觉返回的数据可能不是字符串。甚至尝试过 .ToString();并用 [object, object] 填充它。我对 Jquery 很陌生,不是全新的,但仍然是初学者。您手头是否有页面参考或一些入门代码可以帮助我理解如何将数据分解为表结构?因为sOut 需要看起来像原始帖子中的上表。我只是不确定如何开始从 ajax 响应中提取数据并将其放入表中。
  • 所以玩弄它。我将sOut 更改为oAjaxData,并将sOut 设置为sOut = data.toString();success: 内。非常奇怪的是。我加载页面并发生同样的事情,它返回一个空白行。但是,当我使用 FireBug 单步执行它时,它会正确填充行……我到底做错了什么,被这种行为弄糊涂了。
  • 你的解决方案让我走上了正确的道路。我不得不更改 DataTables 论坛上另一个建议的原始功能。有了你的建议和他的改变,它现在可以完美运行了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2012-02-06
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多