Простой вызов ajax, кажется, блокирует - PullRequest
7 голосов
/ 25 марта 2011

Действительно простой вопрос.Я пытаюсь протестировать веб-сервис Restful, который я разрабатываю, и у меня есть простой вызов ajax (с использованием jquery):

 <script type="text/javascript">  
   $(document).ready(function() { 
     var url = '/index.php/gettest/reallyLongRequest';    
     $.ajax({
       url: url,
       dataType:'text',
       success:function(data) { $('#result').html(data);},
       error:function(xhr,err,e) { alert ("Error: " + err);}
     });                
  });
 </script>

Он запускается при загрузке страницы.Когда он работает, страница блокируется;т.е. (я вижу песочные часы рядом с указателем мыши) никакие другие действия пользователя не могут быть обработаны.(Кстати, этот конкретный запрос на получение - намеренно - занимает очень много времени, чтобы вернуться).

Почему это так?А (асинхронный) JAX верно?Очевидно, я делаю ошибку для начинающих.Любые идеи, пожалуйста?

Когда я пытаюсь сделать это, используя обычный JavaScript (без библиотеки), он работает как положено.Это как-то связано с обработкой Jquery функции xhr onreadystatechange?

Спасибо за поиск.

РЕДАКТИРОВАТЬ: несколько человек предложили установить async: true, что по умолчанию является значением по умолчаниюв jquery, и как таковой не имеет никакого эффекта.

РЕДАКТИРОВАТЬ: Как упоминалось ранее, если я использую обычный javascript и запускаю это с таймером, например, window.setInterval(function() { startLongPoll(); }, 5000) Он обновляется, как ожидается, без появления блокировки.Идеи, кто-нибудь?

Ответы [ 4 ]

4 голосов
/ 30 марта 2011

Вот пример того, что я сделал для решения проблемы:

jQuery(document).ready(function() {
  setTimeout(function () {
   $.getJSON("veryLongRequest", function(json) {
   alert("JSON Result: " + json[0].id);});
  }, 500); // You may need to adjust this to a longer delay.
});

Примечание: я использую сокращенный метод jquery "getJSON", который является оберткой для вызова ajax с типом данных, установленным в "json". Однако это решение будет работать для всех запросов AJAX.

Реферировано:

Остановить браузер "throbber of doom" при загрузке кометы / сервера push iframe

0 голосов
/ 25 марта 2011

Я думаю, что по умолчанию это должно быть true, но попробуйте добавить async: true к вашему параметру ajax json.

0 голосов
/ 26 марта 2011

Работает ли приведенный ниже код должным образом?

 <script type="text/javascript">  
   //$(document).ready(function() { 
     var url = '/index.php/gettest/reallyLongRequest';    
     $.ajax({
       url: url,
       dataType:'text',
       success:function(data) { $('#result').html(data);},
       error:function(xhr,err,e) { alert ("Error: " + err);}
     });                
  //});
 </script>
0 голосов
/ 25 марта 2011

Может захотеть попробовать и Добавить async:true

<script type="text/javascript">  
       $(document).ready(function() { 
         var url = '/index.php/gettest/reallyLongRequest';    
         $.ajax({
           url: url,
           async:true,
           dataType:'text',
           success:function(data) { $('#result').html(data);},
           error:function(xhr,err,e) { alert ("Error: " + err);}
         });                
      });
     </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...