2016-10-30 3 views
-2

У меня есть сценарий jQuery, чтобы получить некоторую информацию из внешнего источника (ajax), и при этом должно появиться изображение загрузчика. JQuery, похоже, не нравится, потому что строка не выполняется. Во время выполнения вход должен быть отключен, но этот код пропускается.jquery, кажется, пропускает некоторые строки кода

Мой JQuery код:

$("#pnum").keyup(function(){ 
    nieuw = $(this).val(); 
    code = $('#pnum').val(); 
    $("#pnum").css("background-color", "#FFC080"); 
    if (oud != nieuw && option != 0 && code.length >= 1 && code.length <=4) { 
    $("#loaderImage").show(); 
    $("input").prop('disabled', true); 
    $("#mode").prop('disabled', true); 
    $('#pnumTable').empty(); 
    if (code.length >= 1) { 
     $.ajax({ 
     url: "http://sistermans.diskstation.me/NetBeans/Postcodes/api-postcode.php", 
     dataType: "jsonp", 
     jsonpCallback: "postcodeResults", 
     data : {mode: option, pnum: code } 
     }); 
    } 
    oud = nieuw; 
    $("#loaderImage").hide(); 
    $("input").prop('disabled', false); 
    } 
    if (code.length < 1 || code.length > 4) { 
    $("#pnum").css("background-color", "yellow"); 
    } 
}); 

Часть в HTML, где загрузчик изображений и ответ должен выскочить:

<div id="loaderImage"> 
    <p>Haal de gegevens op volgens methode : <br> 
    <div id="keuze"></div><p> 
    <p><img src="web_images/ajax-loader-hscrew.gif"></p> 
</div> 
<table> 
    <div id="pnumTable"> 

    </div> 
</table> 

Ответ будет показан в DIV pnumTable. Это всегда работает. <div id="keuze"> обрабатывается в другом месте.

Я, вероятно, сделал что-то не так, но я не могу, где.

Есть ли кто-нибудь, желающий помочь мне?

+2

Ajax является асинхронной поэтому код не остановится, чтобы ждать, пока это не сделано. Метод '.hide()' загрузчика вызывается немедленно, поэтому вы его не увидите. Вам нужно будет добавить код, который вы хотите выполнить, когда вызов Ajax завершит свою функцию обратного вызова. – JJJ

+0

Прочтите [это] (http://stackoverflow.com/a/7613888/863110) ответ. –

ответ

0

Попробуйте положить код скрыть внутри успеха обратного вызова, как это ...

if (code.length >= 1) { 
     $.ajax({ 
     url: "http://sistermans.diskstation.me/NetBeans/Postcodes/api-postcode.php", 
     dataType: "jsonp", 
     jsonpCallback: "postcodeResults", 
     data : {mode: option, pnum: code }, 
     success: function(){ 
       oud = nieuw; 
       $("#loaderImage").hide(); 
       $("input").prop('disabled', false); 
     } 
     }); 
    } 
+0

Скрытие загрузчика не является загрузкой, но это отображение и отключение ввода. Даже когда вызов Ajax не увенчается успехом, loderimage может исчезнуть, и вход должен быть включен. – user1886216

+0

Тогда это звучит так, как будто вам также нужна ошибка: обратный вызов также скрывает его при ошибке ajax. Важным моментом является то, что и успех, и ошибка будут срабатывать после завершения основной функции, поскольку она асинхронна –

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