2013-08-26 5 views
0

Я не знаю почему, но мой Javascript очень медленный и занимает около пяти минут, чтобы закончить правильно, вы иногда обновляете страницы, а некоторые запросы не обрабатываются.Запрос Ajax чрезвычайно медленный

Я уже использовал async: правда надеется, что он обработает немного быстрее, но это не так. Вот код, который я использую для сохранения каждого элемента внутри #myspace.

cn = document.getElementById("myspace").childNodes; 
     for (var t = 0; t < cn.length; t++) { 
      if (cn[t].nodeType == 1) { 
       var n = { 
        id: cn[t].id, 
        left: cn[t].style.left, 
        top: cn[t].style.top 
       }; 
       $.ajax({ 
        data: n, 
        url: "/Application/Ajax/__ajaxProfile.php?a=SavePosition", 
        type: "post", 
        cache: true, 
        async: true, 
        success: function (e) {} 
       }) 
      } 
     } 
     e("Please wait for everything to save, it might take more than a minute."); 

     setInterval(function() { 

     if ($.active == 0) { 

      $('#close-modal').show(); 

     } 

     }, 10); 

Кто-нибудь знает, почему это было обработано так медленно и достойное решение для этого?

+0

Вы показываете свой «близкий модальный» каждые 10 миллисекунд. Кажется немного чрезмерным. –

+1

Вы имели в виду 'setTimeout' вместо' setInterval'? Это может блокировать поток. Else: сколько дочерних элементов имеет '# myspace' и насколько быстро реагирует сервер на запрос (проверьте его в инструментах разработчика)? – RoryKoehein

+0

Я сделал это, чтобы показать его, когда все запросы ajax были закончены, даже без этого он обрабатывается очень медленно. Изменить: чем меньше дочерних элементов, тем быстрее они обрабатываются, я не знаю, связано ли это с тем, что я делаю запрос для каждого узла или что-то еще. – Denis

ответ

3
var n_array=new Array(); 

for (var t = 0; t < cn.length; t++) { 
    if (cn[t].nodeType == 1) { 
     var n = { 
      id: cn[t].id, 
      left: cn[t].style.left, 
      top: cn[t].style.top 
     }; 
     n_array.push(n);  
    } 
} 

$.ajax({ 
    data: n_array, 
    url: "/Application/Ajax/__ajaxProfile.php?a=SavePosition", 
    type: "post", 
    cache: true, 
    success: function (e) {} 
}) 

должен быть быстрее и производить меньше трафика. ofc вам придется немного изменить код обработки ...

+0

Спасибо, попробуй сейчас. – Denis

+0

Да! Это мое решение. – Denis

Смежные вопросы