Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передача ответа из get запроса в объект (https://javascript.ru/forum/events/44937-peredacha-otveta-iz-get-zaprosa-v-obekt.html)

evil0790 07.02.2014 11:50

Передача ответа из get запроса в объект
 
Добрый день. Есть задача каждые 2 секунды отправлять запрос к определённому файлу и в зависимости от ответа продолжать отправлять запрос или выполнить другое действие. Ответ может быть "Y" или "N". Проблема в том, что не могу обратиться к ответу запроса из функции в setinterval, код ниже:
function State(requestId) {
    this.requestId = requestId;
    this.status = "N";
    this.getState = function() {
        $.get($("#b_page_toursearch input[name=TEMPLATE_FOLDER]").val() + "/ajax.php",
            {
                ACTION      : "GET_STATE",
                requestId   : this.requestId
            },
            function(data){
                return data;
            }
        );
    };
}
$(document).ready(function(){
    var state_request = new State(requestId);
    var intervalID = setInterval(function(){
        if(state_request.status == "N"){
            state_request.getState();
        }else{
            clearInterval(intervalID);
        }
    },2000);
})

danik.js 07.02.2014 12:33

Цитата:

Сообщение от evil0790
Проблема в том, что не могу обратиться к ответу запроса из функции в setinterval

А если ответа еще нет, то как ты его получишь? Запрос может затянуться, скажем, на несколько секунд (проблемы с сетью например).
Используй setTimeout вместо setInterval, дожидайся ответа, а там уже действуй как знаешь.

kostyanet 07.02.2014 13:21

Цитата:

Сообщение от evil0790
Проблема в том, что не могу обратиться к ответу запроса из функции в setinterval, код ниже:

Можете. Вместо бинарной юзайте тернарную логику. status = null; Ответ сервера может изменить значение на N или Y. Именно по отличию от null скрипт "понимает" что ответ пришел и принимает то или иное решение. Пока null - выходит на следующий тик и ждет, и ждет, и ждет... дождались, выполнили поручение, status=null и по кругу.

evil0790 07.02.2014 19:14

Спасибо за наводку с таймаутом, действительно, погорячился я с интервалом, реализовал просто вызовом самой функции из себя с таймаутом в зависимости от ответа.

kostyanet 07.02.2014 19:54

Цитата:

Сообщение от evil0790
Ответ может быть "Y" или "N".

Ответ про фому, автор про ерему. Если ответ может быть N, и N у вас по умолчанию, вы как поймете что ответ вообще пришел? Ну, в рамках обращения по таймеру.

evil0790 07.02.2014 20:33

Цитата:

Сообщение от kostyanet (Сообщение 296576)
Ответ про фому, автор про ерему. Если ответ может быть N, и N у вас по умолчанию, вы как поймете что ответ вообще пришел? Ну, в рамках обращения по таймеру.

я переделал скрипт, сейчас использую обычную функцию, а не объект

kostyanet 08.02.2014 09:24

Как будто это имеет значение.

Я к тому что будучи немного знакомым с электронным приборостроением помню еще технологии опросов и прерываний. Когда в софтвере возникает задача следить за чем-то по тикам, никуда от хардверной технологии не деться. Потому что подводная лодка.

danik.js 08.02.2014 12:17

Цитата:

Сообщение от kostyanet
Когда в софтвере возникает задача следить за чем-то по тикам

Не нужны тут никакие "тики". Браузер сам оповестит об окончании запроса и вызовет callback.

kostyanet 17.02.2014 05:40

По условиям задачи нужны, что, конечно, для веб-приложений несуразно. Наверно автор не знал как обычно делается.


Часовой пояс GMT +3, время: 18:18.