Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Ajax запрос на Prototype - что не так?


Автор: Myryan 1.3.2010, 11:14
Приветствую.

Есть jsp страничка с подключенными скриптами.
Код

<script language="javascript" type="text/javascript" src="scripts/prototype.js?dummy=14669"></script>
<script language="javascript" type="text/javascript" src="scripts/ajax/fwrss/folderChangeAction.js?dummy=14669"></script>
<script language="javascript" type="text/javascript" src="scripts/basicWizardFrame.js?dummy=14669"></script> 


Есть кнопочка Cancel на это страничке c событием onclick="popupCloseWindow(); return false;"
Код

function popupCloseWindow()
{
 if (document.forms[0].frame.value.indexOf("SurveyWizardMerge") != -1) {
   clearSelectedSurveys() ; 
 }
 window.close();
}

function clearSelectedSurveys() {
new Ajax.Request('DeleteSelectedSurveys', {   // сервлет, описан в web.xml
method: 'post',
 onSuccess: function(transport, json) {
 },
 onFailure: function() {
 alert('basiWizardFrame.js:clearSelectedSurveys(). Unable to delete selected surveys.');
 }
 });
}


Вроде бы ничего особенного: должен сработать запрос и окно закроется. 
После того как сервлет отрабатывает, окно закрыается, а в родительском окне в firebug появляется след. эррор
Код

Ajax is not defined
Failed to load source for: https://loc...defgo/scripts/prototype.js?dummy=14669  prototype.js?14669 (line 1485)


который указывает на строчку в prototype.js
Код

line 1484:  respondToReadyState: function(readyState) {
line 1485:    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);   <----


Сначало думал, что не успевает отработать запрос, прежде чем закроется окно и ресурсы(.js файлы) освободятся. 
Но сервлет точно отрабатывает. 
В ослике никакого сообщения об ошибки джаваскрипта не выдается. 

Сам не силен в джаваскприте и поэтому решил спросить у вас. 
Есть какие-нибудь мысли по этому поводу?

Автор: 12345c 1.3.2010, 16:19
Вероятно, страница слишком быстро закрывается, и ajax не успевает отослать полные данные; ставьте close(); внутри коллбека:
Код

 onSuccess: function(transport, json) {
  //...дать отчёт о приходе ответа в opener (родит. окно)
  close(); 
 }
(К тому же, в Вашем случае onSuccess: не сработал бы, потому что окно будет закрыто.)

Автор: Myryan 1.3.2010, 16:50
Спасибо за совет.  smile  Ошибка больше не появляется.

И как я сам не догодался!? 

Автор: 12345c 1.3.2010, 19:42
Временное сужение кругозора вследствие концентрации сил на другой части задачи.
Для того и задают вопросы в подобных местах smile.

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