【问题标题】:How to encode large HTML lists for jQuery?如何为 jQuery 编码大型 HTML 列表?
【发布时间】:2011-10-16 17:51:27
【问题描述】:

我有一个 PHP 脚本,它获取相对大量的数据,并将其格式化为 HTML 无序列表,以便在 Ajax 应用程序中使用。

考虑到数据大约是几十到可能超过一百 KB,并且我希望能够使用 Javascript 区分不同的列表,那么最好的方法是什么?

我考虑过 json_encode,但是当请求的行数超过一定数量时会导致 [null](可能是 PHP 内存限制?)。

非常感谢, 费拉

【问题讨论】:

  • 我注意到字符类型的 json_encode 错误。我一直无法缩小范围,但是当传递特定字符进行编码时,结果为空。
  • 啊,那就这样吧。好吧,我通过在结果之间插入一个 HTML 标记并使用 JS 在这些位置进行拆分来采用临时解决方案。似乎工作正常:-)

标签: php mysql html ajax database


【解决方案1】:

字符串中的某些非法字符可能会破坏 PHP 中的 json_encode() 函数,您需要对其进行清理才能正常工作。如果这成为问题,您可以使用正则表达式来执行此操作。

但是,如果您发送的请求包含大量数据,则使用 AJAX 发送此请求可能是不明智的,因为您的应用程序看起来非常无响应。直接从数据库中获取这些数据可能会更好,因为这将是一种更快的方法,尽管您显然必须妥协。

【讨论】:

  • 很抱歉这么久没有回复您。在这种情况下,除了 AJAX 之外别无选择(除非我做了一些骇人听闻的多 iframe 工作)。无论如何,它主要在本地 Intranet 中使用,至于通过网络访问它的少数人,这就是 spinner gif 的用途:)
【解决方案2】:

我无法点击,但我同意 Daniel West 的观点。

确保您的字符串采用 UTF-8 编码或在连接时使用 mysql_set_charset('utf8')。不幸的是,mysql 的默认字符集是拉丁语/Windows。 Null 是编码失败的结果,因此,如果内存不足,脚本本身就会失败。

【讨论】:

    【解决方案3】:

    我将通过 JSON 传递数据,并以您可以增量呈现的小批量进行。这将使它看起来更快,并且可能会解决您遇到的内存问题。如果滚动条上方的数据(前 40 行左右)加载速度很快,那么如果页面的其余部分需要几秒钟的时间来加载就可以了。如果您想变得棘手,您甚至可以加载第一页,然后等待滚动事件来加载其余页面,因此如果用户从不滚动查看下面的数据,您不必过多地访问服务器滚动条。如果 php 从 json_encode 返回 null,那是因为无效字符。如果您无法控制数据,您可以只将 HTML 从服务器发送到客户端并避免所有编码/解码,但这意味着要传输更多数据。

    【讨论】:

    • 我的 HTML 转储实现似乎工作正常。加载时间足够快(不到两秒,通常更短)。此外,我很确定用 HTML 填充元素比通过 JSON 数组并将其转换为元素的计算成本更低。
    【解决方案4】:

    使用 jquery,您可以将无序列表转换为 ajax 应用程序中的 javascript 数组。

    $.map( $('li'), function (element) { return $(element).text() });
    

    此外,下划线是一些非常简洁的 javascript 数组和集合函数。 http://documentcloud.github.com/underscore/

    【讨论】:

      【解决方案5】:

      我更喜欢 JSON,我认为您从 PHP 编码中获得的“null”是由于 jSON 使用 javaScript 的双重转义机制造成的。我已经在另一篇文章中解释过了。

      您需要双重转义特殊字符(在您的情况下,一个可疑的“空”原因是“\n”)

      json parse error with double quotes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-01
        • 2023-04-05
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 2016-06-16
        相关资源
        最近更新 更多