Вызов getJSON срабатывает только один раз?

У меня есть setintervall, который вызывает (каждые 10 секунд) следующую функцию:

function myJSONCall(imgIDs) {
    var href = $('#href_' + imgIDs[0]).attr('href');
    alert("MyJSONCall..." + href);

    $.getJSON("/mvc-ajax/ac/availability", {
        url: href
    }, function(availability) {
        alert("Availabilit=" + availability);
        if (availability == "OK") {
            alert("It's a valid location");
        } else {
            alert("It's an invalid location");
        }
    });
    alert("I left from myJSONCall");
}

Я не знаю почему, getJSON запускается только один раз. Оба набора предупреждений между $.getJSON отображаются каждые 10 секунд. Так в чем проблема?


person Zamboo    schedule 27.06.2011    source источник


Ответы (1)


ajax асинхронный. переместите свой settimeout (или интервал) после возврата вызова ajax:

function myJSONCall(imgIDs) {
    var href = $('#href_' + imgIDs[0]).attr('href');
    alert("MyJSONCall..." + href);
    $.getJSON("/mvc-ajax/ac/availability", {
        url: href
    }, function (availability) {
        alert("Availabilit=" + availability);
        if (availability == "OK") {
            alert("It's a valid location");
        } else {
            alert("It's an invalid location");
        }
        setTimeout(myJSONCall, 10000); //SET TIMEOUT HERE
    });
    alert("I left from myJSONCall");
}
person Naftali aka Neal    schedule 27.06.2011
comment
@Neal: Как и было предложено, я переместил setInterval после вызова getJSON, но не удалось! и теперь функция ajax вызывается только один раз. - person Zamboo; 27.06.2011
comment
не используйте setInterval. использовать setTimeout - person Naftali aka Neal; 27.06.2011
comment
@Zamboo, это также может означать, что вы используете неправильную функцию. попробуйте использовать $.get вместо $.getJSON... - person Naftali aka Neal; 27.06.2011
comment
@Neal: Когда вы устанавливаете setTimeout в своем ответе, я копирую / вставляю его ... Я думаю, что не могу использовать «get», потому что я обмениваюсь данными, используя JSON / JACKSON на Java-сервере ... - person Zamboo; 27.06.2011
comment
@Neal: я должен проверить, вызвать какой-то код Java на другой стороне ... Но вы правы, с $.get он срабатывает каждые 10 секунд, НО setTimeout не подходит, я использую setInterval. Спасибо за ваше время. - person Zamboo; 27.06.2011