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


Автор: ravnur 5.4.2009, 21:24
Код

<script type="text/javascript">
    //<![CDATA[
        var from = 650;
        var to = 1200;
        alert('started');
        $.ajax({
                async: "false",
                type: 'GET',
                url: 'minmax.php',            
                dataType : "json",                    
                success : function (data, textStatus) {
                   var from = data.values[0].from;
                   to = data.values[0].to;
                   alert('in func');
                }
         });

         alert('outer');

    .............    

    // -->
    </script>


в хидере страницы есть такой код, работающий при обновлении страницы. несмотря на то, что вызов является Cинхронным порядок показа сообщений такой:
- started
- outer
- in func
хотя, по идее, "in func" должен идти вторым.
вопрос: как сделать вызов json Действительно синхронным?

Автор: rabbitObject 13.5.2009, 18:42
По моему все правильно... Сначала у тебя выводится "started", потом создается объект, который передается как параметр в метод ajax(), дальше выводится "outer". А вот когда приходит аяксовый ответ тогда вызывается функция-обработчк:
Код

function (data, textStatus) {
    var from = data.values[0].from;
    to = data.values[0].to;
    alert('in func');
}

..., где вызывается алерт "in func"... Если ты хочешь, чтобы какая-либо функция вызывалась только после того, как получен ответ через ajax -  вызывай ее в обработчике:

Код


var from = 650;
var to = 1200;

function somefunc() {
    // some code
    alert("outer");
}

alert('started');

$.ajax({async: false, // да, и сюда передавать нужно boolean значение вместо string
             type: 'GET',
             url: 'minmax.php',            
             dataType: "json",                    
             success: function (data, textStatus) {
                 from = data.values[0].from;
                 to = data.values[0].to;
                 alert('in func');
                 somefunc(); // call somefunc 
             }
         });


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