Просмотр полной версии : sendAndLoad в функции
Здравствуйте, столкнулся с проблемой, что у меня игнорируется sendAndLoad в функции
getV = function (v1) {
sendvar.sendAndLoad(SERVER, varxml, "POST");
varxml.onLoad = function() {
vr=varxml.firstChild.firstChild.nodeValue;
trace("Загрузил");
}
return vr;
}
Внимательно изучите пример работы LoadVars в соответствующем разделе документации.
В Вы не могли бы всё же помочь? Я смотрел документацию, но так и не нашёл ответа на свой вопрос
Сдается мне, что Вы смешали методы sendAndLoad классов XML и LoadVars. Вы ожидаете в ответе XML, а LoadVars ожидает в ответе пары [имя=значение], разделенные '&'. Так понятнее?
Но без функции у меня всё работает 0_о
Гм. Пути флеша неиспобедимы. Мой косяк.
По Вам: асинхронная операция загрузки не может моментально вернуть результат. То есть, Вы надеятесь получить результат просто вызвав getV. Она вернет undefined, потому что не будет ждать окончания загрузки.
Вам необходимо продолжить работу после получения ответа. вот и всё
var app:Object = this;
varxml.onLoad = function(success:Boolean) {
if (success) {
trace("Загрузил");
app.processResponce(this);
} else {
trace("Oooops!");
}
};
sendvar.sendAndLoad(SERVER, varxml, "POST");
function processResponce(value:XML):Void {
var vr:String = value.firstChild.firstChild.nodeValue;
// go up!
}
У меня там всё же в функции есть что то я просто это вырезал для наглядности и структуру мне желательно такую же оставить, я попытался Ваш код переписать, всё равно не работает.
getV = function (v1) {
//тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
sendvar.sendAndLoad(SERVER, varxml, "POST");
varxml.onLoad = function() {
vr=varxml.firstChild.firstChild.nodeValue;
trace("Загрузил");
}
return vr;
}
Ну не вернет getV ожидаемое значение! потому что varxml.firstChild.firstChild.nodeValue на момент начала загрузки не существует. Дождитесь окончания загрузки. потом и спрашивайте свой vr.
function getV(v1):Void {
//тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
var app:Object = this;
varxml.onLoad = function(success:Boolean) {
if (success) {
trace("Загрузил");
app.processResponce(this);
} else {
trace("Oooops!");
}
};
sendvar.sendAndLoad(SERVER, varxml, "POST");
}
function processResponce(value:XML):Void {
var vr:String = value.firstChild.firstChild.nodeValue;
// go up!
}
Такая структура работать не будет.
getV = function (v1) {
//тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
sendvar.sendAndLoad(SERVER, varxml, "POST");
varxml.onLoad = function() {
vr=varxml.firstChild.firstChild.nodeValue;
trace("Загрузил");
}
return vr;
}
Сначала выполняется желтая часть, а потом, когда нибудь, голубая.
Как видите return vr находится в желтой части, а vr=varxml.firstChild.firstChild.nodeValue; в голубой, поэтому будете получать undefined
А как в таком случае приостановить выполнение функции, пока не придёт ответ?
Никак, запускайте какую-нибудь функцию в обработчике onLoad.
Michaael
15.05.2009, 12:29
Запускайте функцию, которая обрабатывает переменные и вообще продолжает работу, внутри функции onLoad...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.