2015-10-28 2 views
1

Я пытаюсь добавить небольшую задержку (2 секунды) между значком загрузчика и успехом с данными как html.Установить задержку при вызове ajax

То, что я пытался использовать, это setTimeout и ввести номер задержки. Это не работает, поэтому я надеялся, что вы сможете показать мне, какой правильный путь.

Мой код Аякса:

<script type="text/javascript"> 

$(function() { 

    var delay = 2000; 

    var res = { 
     loader: $("<div />", { class: "loader" }) 
    }; 

    $('#search').on('click', function() { 
     $.ajax({ 
      type: 'GET', 
      url: "@Url.Action("Find", "Hotel")", 
      datatype: "html", 
      beforeSend: function() { 
       $("#group-panel-ajax").append(res.loader); 
       setTimeout(delay); 
      }, 

      success: function (data) { 
       $("#group-panel-ajax").find(res.loader).remove(); 
       $('#group-panel-ajax').html($(data).find("#group-panel-ajax")); 
      } 
     }); 
     return false; 
    }); 
}); 

</script> 

Сейчас он работает очень быстро. Надеюсь, кто-то может помочь.

+2

Это не как 'setTimeout' работы. Прочитали ли вы [документацию] (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout)? – j08691

+0

Где вы видели 'setTimeout', используемый как' setTimeout (delay) '? Я бы нашел лучший источник/учебник/документацию. –

+0

Что вы на самом деле пытаетесь отложить? Вам нужна задержка перед отправкой запроса? Или вы хотите получить задержку после получения ответа и перед отображением результатов? –

ответ

5

setTimeout следует использовать внутри successfunction.

$(function() { 
 
    var delay = 2000; 
 
    var res = { 
 
    loader: $("<div />", { 
 
     class: "loader" 
 
    }) 
 
    }; 
 
    $('#search').on('click', function() { 
 
    $.ajax({ 
 
     type: 'GET', 
 
     url: "@Url.Action("Find", "Hotel")", 
 
     datatype: "html", 
 
     beforeSend: function() { 
 
     $("#group-panel-ajax").append(res.loader); 
 
     }, 
 
     success: function(data) { 
 
     setTimeout(function() { 
 
      delaySuccess(data); 
 
     }, delay); 
 
     } 
 
    }); 
 
    return false; 
 
    }); 
 
}); 
 

 
function delaySuccess(data) { 
 
    $("#group-panel-ajax").find(res.loader).remove(); 
 
    $('#group-panel-ajax').html($(data).find("#group-panel-ajax")); 
 
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Большое вам спасибо .. работает как шарм. – Mikkel

3

вот что-то я нашел, когда я хотел сделать то же самое:

function doStuff() 
{ 
    //do some things 
    setTimeout(continueExecution, 10000) //wait ten seconds before continuing 
} 

function continueExecution() 
{ 
    //finish doing things after the pause 
} 

надеюсь, что это поможет Я.

0

Используйте setTimeout() так:

<script type="text/javascript"> 

$(function() { 

    var delay = 2000; 

    var res = { 
     loader: $("<div />", { class: "loader" }) 
    }; 

    $('#search').on('click', function() { 
     $.ajax({ 
      type: 'GET', 
      url: "@Url.Action("Find", "Hotel")", 
      datatype: "html", 
      beforeSend: function() { 
       $("#group-panel-ajax").append(res.loader); 

      }, 

      success: function (data) { 
       setTimeout(function(){ 
        $("#group-panel-ajax").find(res.loader).remove(); 
        $('#group-panel-ajax').html($(data).find("#group-panel-ajax")); 
       }, delay); 

      } 
     }); 
     return false; 
    }); 
}); 

</script> 
0

$(function() { 
 
    var delay = 2000; 
 
    var res = { 
 
    loader: $("<div />", { 
 
     class: "loader" 
 
    }) 
 
    }; 
 
    $('#search').on('click', function() { 
 
    $.ajax({ 
 
     type: 'GET', 
 
     url: "@Url.Action("Find", "Hotel")", 
 
     datatype: "html", 
 
     beforeSend: function() { 
 
     $("#group-panel-ajax").append(res.loader); 
 
     }, 
 
     success: function(data) { 
 
     setTimeout(function() { 
 
      delaySuccess(data); 
 
     }, delay); 
 
     } 
 
    }); 
 
    return false; 
 
    }); 
 
}); 
 

 
function delaySuccess(data) { 
 
    $("#group-panel-ajax").find(res.loader).remove(); 
 
    $('#group-panel-ajax').html($(data).find("#group-panel-ajax")); 
 
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Вы должны добавить небольшое объяснение своего ответа. – Neil

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