Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > AJAX, последовательныи вызов


Автор: Reptor 9.3.2010, 16:09
Вот есть 2 такие функции
Код


function makePOSTRequest(url, parameters) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        //alert('Cannot create XMLHTTP instance');
        //return false;
    }
    
    http_request.onreadystatechange = processedStatus;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
}


function processedStatus() {
   if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            var result = http_request.responseText;
            var jsonObject = eval('(' + result + ')');
            //alert(jsonObject.status);
            if(jsonObject.status == "ok") {
                
            } else if (jsonObject.status == "version"){
            
            } else {
             
            }
        }
    }
}

    
и 2 вызова 
   
    
Код

makePOSTRequest('versiobn, '{'+JSONData+'}');
makePOSTRequest('status-info', '{'+JSONData+'}'); 



так вот проблема в том что есть конфликт... 1-и вызов не видно.. в условие jsonObject.status == "version" не попадаю...

если сделать sleep после 1-ого вызова то всё ок... попадаю

как их сделать независимыми.. или какими там??


Автор: ksnk 9.3.2010, 16:48
Копай в сторону синхронного запроса. пользы проекту это, imho, не принесет, но понимания возможностей - прибавит ;)
польза будет , если возникнет пониманиe callback - взаимодействия этих запросов.

P.S. результат выполнения кода предсказуем ;) Первый вызов функции заводит глобальную переменную с именем http_request, второй вызов функции эту переменную преопределяет, с присущим Javascript'у вызовом дескрукторов системных объектов... 

Автор: Reptor 9.3.2010, 20:08
ksnk, а если сделать ее локальнои?

Автор: ksnk 9.3.2010, 20:31
придется еще замыкать функцию processedStatus, чтобы она смогла увидеть эту локальную переменную... А так - должно помочь...

Автор: IDVsbruck 10.3.2010, 03:47
Сделать функцию-координатор, которая будет как отправлять запросы, получать ответы, вызывать коллбеки и оперировать необходимыми переменными. Это несложно, особенно если использовать фреймворки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)