Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Ext.ajax.query


Автор: asagi 8.7.2011, 22:10
Здравствуйте, форумчане!
Вот начал изучать недавно замечательный фреймворк EXTJS. Столкнулся с простецкой проблемой...

Есть функция, из которой делается ajax запрос в скрипт. Мне нужно, что бы эта функция возвращала ответ, однако я столкнулся с некоторыми сложностями. Привожу код функции:

Код:

Код

function ex_ajax_form(form){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
var resp = response.responseText;
txt=resp;
    }
        });
        alert(txt);
        return txt;
}




Alert показывает undefined. Подскажите, где я мог ошибиться? Область видимости переменной или что??  smile 

Автор: нуп 8.7.2011, 22:13
Скорей всего запрос асинхронный, для него надо alert писать в функции success

Автор: asagi 8.7.2011, 22:17
нуп, alert всего лишь как средство диагностики. Функция должна возвращать ответ от скрипта forms.php. Но в ответе пустота, хотя php скрипт отдает данные нормально  smile 

Автор: нуп 8.7.2011, 22:26
Ваш ответ придет в функцию success! Перед ответом выполнится функция ex_ajax_form и вернет пустоту.

Автор: asagi 8.7.2011, 22:40
нуп,я чет под ночь торможуsmile)) smile 
А что нужно сделать, что бы функция не возвращала пустоту? Как мне из succes передать ответ в ex_ajax_form? Можете привести фрагмент кода?

Автор: нуп 8.7.2011, 22:45
Сделать запрос с ожиданием ответа. async: false .  Если вам это подойдет.

Автор: asagi 9.7.2011, 07:28
нуп, спасибо,  а для асинхронного запроса есть решение?

Автор: нуп 9.7.2011, 10:20
Да, надо в success функцию(или вместо нее) передавать вашу функцию, которую надо будет вызвать
Код

function callback_func(data) {
         alert(data);
}

function ex_ajax_form(form, callback_func){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
             var resp = response.responseText;
            txt=resp;
             callback_func(resp);
    }
        });
}

Автор: asagi 9.7.2011, 19:57
Нуп, спасибо! Ща будем пробовать....smile

Автор: asagi 10.7.2011, 22:28
Нуп, скопировал твой код к себе..не работает :( Firebug говорит, что callback_func, не есть функция :(

Добавлено через 4 минуты и 8 секунд
Изменил тип запроса на синхронный, но все равно, проблема та же...%) smile 

Автор: нуп 10.7.2011, 23:35
Переименуйте на function ex_ajax_form(form, callback) ну и вызов сам тоже

Автор: asagi 11.7.2011, 08:07
Нуп, все равно не работает...Но вот что я заметил. Если функция такая:

Код

function ex_ajax_form(form){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
 resp = response.responseText;
txt=resp;
    }
        });
        alert(txt);
        return txt;
}



То alert показывает undefined, но при этом функция работает. Возвращает то, что ей выдает скрипт forms.php.


 А если код функции такой:

Код

function ex_ajax_form(form){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
 resp = response.responseText;
txt=resp;
    }
        });
        return txt;
}


То функция перестает работать. Как это понимать? Почему с alert работает, а без уже нет?? smile 

Автор: нуп 11.7.2011, 10:26
Отдает ли сервер вообще что-то?

Добавлено через 17 секунд
Что вы посылаете, и что приходит?

Автор: asagi 11.7.2011, 12:06
нуп, сам php скрипт forms.php работает адекватно. В него передается:form=edit_profile_p1, а в ответ приходит форма редактирования профиля. Если делать вручную (тупо передать в forms эту переменную) все работает. Проблема именно в JS и я не пойму в чем именно. Вызов делаю так:

Код

.....
 createWindow : function(){
        var desktop = this.app.getDesktop();
        var win = desktop.getWindow('grid-win');
        if(!win){
       var msg=ex_ajax_form('edit_profile_p1');
            win = desktop.createWindow({
                id: 'grid-win',
                title:'Настройка профиля',
                width:740,
                height:480,
        html:msg,
......


 И собственно функция, в её изначальном варианте:
Код

function ex_ajax_form(form){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
 resp = response.responseText;
txt=resp;
    }
        });
        alert(txt);
        return txt;
}


В итоге alert говорит undefined, а вот в окно загружается нужная форма. Но стоит убрать alert как ничего не грузится.

Автор: нуп 11.7.2011, 12:37
Для вашего случая, надо ставить async : false. 

Автор: asagi 11.7.2011, 15:37
нуп, да ставил...никакой разницы :(

Автор: нуп 11.7.2011, 16:27
Та не может быть!

Добавлено через 13 минут и 9 секунд
а такое
Код

function ex_ajax_form(form){
var txt;
Ext.Ajax.request({  
   url: 'forms.php',
   params: {'form':form},
   success: function(response){
  alert(response);
  alert(response.responseText);
 resp = response.responseText;
txt=resp;
    }
        });
        alert(txt);
        return txt;
}

Автор: asagi 12.7.2011, 10:25
Код

alert(response);


 Показывает - object Object

Код

alert(response.responseText);



 Показывает правильный ответ от сервера. Форма html....

Код

 alert(txt);


 Показывает undefined...Чудеса smile

Автор: нуп 12.7.2011, 11:39
Да попробовал сам, не выходит. Используйте тогда callback функцию.

Автор: asagi 12.7.2011, 13:46
Цитата(нуп @  12.7.2011,  11:39 Найти цитируемый пост)
Используйте тогда callback функцию.


нуп, прости, что надоедаю, а иначе никак?
 smile 

Автор: нуп 12.7.2011, 13:49
Я не использовал Ext. погуглите 

Автор: asagi 12.7.2011, 18:02
нуп, панятно, спасибо за помощьsmile

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