За последние 24 часа нас посетили 23349 программистов и 1514 роботов. Сейчас ищут 794 программиста ...

Не понимаю почему? (((

Тема в разделе "JavaScript и AJAX", создана пользователем Dmitriy A. Arteshuk, 1 окт 2014.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    имеем

    Код (Text):
    1.  
    2. (function get_log(){
    3.            $.ajax({
    4.             type: "GET",
    5.             url: "/index.php?action=get_log",
    6.             dataType: 'json',
    7.  
    8.             success: function(answer, textStatus, XMLHttpRequest) {
    9.  
    10.                 var status = answer.status;
    11.                 var message = answer.message;
    12.                 if (status == "finish")
    13.                 {
    14.                     clearTimeout(timeoutIDlog);
    15.                 }
    16.             },
    17.  
    18.             error: function(XMLHttpRequest, textStatus, errorThrown) {
    19.  
    20.             },
    21.  
    22.             complete: function(XMLHttpRequest){
    23.                 timeoutIDlog = setTimeout(get_log, 3000);
    24.             }
    25.           });      
    26.         }());
    в чем соль

    отправляем запрос серваку, он нам отвечает нечто в json

    что надо: если var status = answer.status; пришло нечто, в данном примере finish надо тормознуть clearTimeout(timeoutIDlog);

    не останавливается и все тут ((( что делаю не так?
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Перед методом $.ajax() добавить var timeoutIDlog; И делать проверку внутри complete, т.к. эта функция выполнится после success
     
  3. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1.  
    2. (function get_log(){
    3.  
    4.         var timeoutIDlog;
    5.          $.ajax({
    6.          type: "GET",
    7.           url: "/index.php?action=get_log",
    8.           dataType: 'json',
    9.  
    10.           success: function(answer, textStatus, XMLHttpRequest) {
    11.  
    12.             var status = answer.status;
    13.             var message = answer.message;
    14.             if (status == "finish")
    15.             {
    16.                clearTimeout(timeoutIDlog);
    17.                console.log(timeoutIDlog+'success');
    18.             }
    19.           },
    20.  
    21.           error: function(XMLHttpRequest, textStatus, errorThrown) {
    22.  
    23.           },
    24.  
    25.           complete: function(XMLHttpRequest){
    26.              timeoutIDlog = setTimeout(get_log, 3000);
    27.           }
    28.         });      
    29.       }());
    сделал так

    в итоге в консоли undefinedsuccess и все так же не останавливает выполнение, каждый 3 секунды выполняет запрос (
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    P.S. Первое предложение можно забыть в связи со вторым)) Именно потому, что complete выполнится после success и в любом случае, то именно там нужно делать проверку.
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    спасибо, проверку чего делать? установлена ли var timeoutIDlog?
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Вот примерно так
    Код (PHP):
    1. (function get_log(){
    2.     var status;
    3.     $.ajax({
    4.         type: "GET",
    5.         url: "/index.php?action=get_log",
    6.         dataType: 'json',
    7.         success: function(answer, textStatus, XMLHttpRequest) {
    8.             status = answer.status;
    9.             var message = answer.message;   
    10.         },
    11.         error: function(XMLHttpRequest, textStatus, errorThrown) {
    12.         },
    13.         complete: function(XMLHttpRequest){
    14.             if (typeof status != 'undefined' && status != 'finish'){
    15.                 timeoutIDlog = setTimeout(get_log, 3000);
    16.             }
    17.         }
    18.     });       
    19. }());
     
  7. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    АЛИЛУЯ!

    спасибо мил человек, давай кошель вебмани )
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Обойдёмся ;)
     
  9. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    все равно спасибо

    кинь в личку почту, а?

    Просто мне частенько по JS нужно вправлять мозги, иногда это долго, а сделать надо срочно (а проблемы, как видно, часто просто из-за отсутствия "набитой руки" на JS), вобщем если интересуют небольшие задачки за адекватную оплату, стукнись пожалуйста.