0

在 js 中,我通过 ajax 调用服务器,服务器返回我应该插入到 dom 中的已处理数据。

$.fn.loadChildren = function() {
  var $li = $(this);

  ajaxQueue.add({
    url:     "myUrl.to",
    data:    "mydata",
    success: function(data) {

      $li.find("ul").html(data);
      ....

问题是数据可能是非常大的字符串,在这种情况下,在 FF 中我收到错误消息“此页面上的脚本可能很忙,或者它可能已停止响应......”

我尝试使用 replaceWith 而不是 html,但我仍然遇到同样的问题。

我知道在每个浏览器中插入 DOM 都有一个限制,但我想知道在 jQuery 优化中还有什么可以尝试的。

谢谢

4

2 回答 2

3

可能缩小选择器?

$("#myul").html(data);

尝试分块数据。像这样的东西应该有助于提高性能。

var chunks = [];
var counter = 0;

chunks = breakApartDataIntoChunks(data);

setTimeout(function() { processChunk(chunks, counter); }, 0);

function processChunk(chunks, counter) {
    if (counter < chunks.length) {
        // insert this chunk into dom here
        $li.find("ul").append(chunks[counter]);
        counter++;
        setTimeout(function() { processChunk(chunks, counter); }, 1);
    }
}
于 2013-05-28T16:33:37.540 回答
1

我猜你返回的不是一大块 Html,而是很多元素,比如列表或表格,你可以做的不是返回 html,而是返回一个 JSON 数组,包含这些元素,然后插入它们一个一个,是这样的:

//response = ['<div>One Element</div>', '</div>Another Elmenet</div>']
for(var i = 0; i < response.lenght; i++) {
     $('ul#myElement').append($('<li>').html(response[i]));
}

希望能帮助到你

于 2013-05-28T16:56:19.383 回答