22.11.2011, 10:10
|
sinistral
|
|
Регистрация: 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. фича уже не новая. я в неё не вникал, но вы можете почитать доки по этому объекту.
|