Показать сообщение отдельно
  #2 (permalink)  
Старый 22.11.2011, 10:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

есть три способа получить ответ (результирующий текст)
  • сделать запрос синхронным. тогда ваша конструкция будет полностью рабочей. но это сопровождается замораиванием интерфейса на время совершения запроса. притормаживать будет
    function __get (d) {
    	var myreq = $.ajax({type: 'POST',url: "modules/server.php",
    				data : d,
    *!*
    				async : false,
    */!*
    			});
    *!*
            return myreq.responseText;
    */!*
    }
    var res=__get({ "operation" : "get_com", "id" : node.id });
    
  • указать функцию обратного вызова. в этом случае пришедший текст будет доступен только тогда, когда ajax-запрос завершится. т.е. манипулировать с текстом будет чуточку не так, как в вашем коде
    //общая функция для ajax
    function __get (d, callback) {
            // если не передана, то используем функцию-пустышку.
            if(!callback) callback = $.noop;
    
    	$.ajax({type: 'POST',url: "modules/server.php",
    				data : d,
    				success : *!*callback*/!*,
                                    error : ajerror
    			});
            function ajerror(){ /*ошибка*/ }
    }
    
    ....
    
    function myclb(result){
        var res = result;
        comments=res.Data; 
    }
    
    __get({ "operation" : "get_com", "id" : node.id }*!*,myclb*/!*);
    
  • использовать deferred. это то же самое, что и использование функции обратного вызова.
    //общая функция для ajax
    function __get (d, callback) {
            // если не передана, то используем функцию-пустышку.
            if(!callback) callback = $.noop;
    
    	$.when( $.post("modules/server.php",d) ).done(callback).fail(ajerror);
    
            function ajerror(){ /*ошибка*/ }
    }
    
    ....
    
    function myclb(result){
        var res = result;
        // .....
    }
    
    __get({ "operation" : "get_com", "id" : node.id }*!*,myclb*/!*);
    



Сообщение от posta Посмотреть сообщение
Вроде слышал, как то можно решить с помощью нового jQuery - выставлять очередность функции, но не могу найти.
Deferred. фича уже не новая. я в неё не вникал, но вы можете почитать доки по этому объекту.
Ответить с цитированием