Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Prototype.js: как асинхронно запостить форму?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Prototype.js: как асинхронно запостить форму?
Имя
Сообщение << Старые топики   Новые топики >>
Prototype.js: как асинхронно запостить форму? - 2008-12-01 01:31:59.120000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Собственно, вопрос. Пробую так:

function ajaxSubmitForm(formName, url, serverMethod, callback) { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var m = document.getElementsByName("method")[0];&nbsp;&nbsp; // нужно конкретно для моей задачи &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; m.value = serverMethod; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var f = document.getElementsByName(formName)[0]; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //var params = f.serialize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // это строчку IE вообще не понял, почему? &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var params = serializeForm(form);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // соответственно, моя замена предыдущей функции &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var ajax = new Ajax.Request(url, { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; method: 'post', &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parameters: params, &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; onSuccess: callback } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ); &nbsp;&nbsp;&nbsp; } Если не считаь бага с f.serialize(), в IE работает как надо. Firefox и Opera сабмитят форму (причём оба почему-то сразу дважды), и пытаются перезагрузить всю страницу.
Post #: 1
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-01 19:46:43.966666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Что пишут лиса и опреа в консолях JavaScript?
Обязательно с использованием prototype?
Post #: 2
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-01 21:19:05.330000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Так в том то и дело, что ничего не пишут.
Покапался в серверном коде, так броузеры вообще решили, что ответ сервера нужно сохранять как файл.

Очень хотелось бы сделать это именно через прототайп.
Post #: 3
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-01 23:04:02.726666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
С прототайп не работал, но смущает строчка
quote:

onSuccess: callback

На месте callback должна же быть функция
onSuccess : function(request){ alert(request.responseText); }
Post #: 4
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 01:33:21.753333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
callback - это и есть функция, и как любой другой джаваскриптовский объект, она может быть присвоена какому-то полю объекта. Теоретически =) В любом случае, так уже попробовал. И с вызовом коллбека проблем нет, сейчас проблема в том, что сервер возвращает какой-то текст, который Лиса и Опера пытются интерпретировать его как документ и, соответствнно, предлагают сохранить его (раньше и этого не предлагали, это я на серверной стороне покопался). А должны броузеры этот текст просто принимть и передавать в callback.

Судя по всему, Prototype просто работает с расширенными формами, то есть вся работа ведётся через $(element), а функция $ вызывает Element.extend(element), и получается новый объект с новыми свойствами.
Post #: 5
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 01:52:06.153333   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
var post = $("#form1").serialize();

мож так?

http://www.west-wind.com/weblog/posts/472329.aspx

хотя если честно в аяксе не бум-бум
Post #: 6
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 02:26:05.696666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Использовать напрямую функцию $() я вообще не могу, т.к. код страницы генерируется автоматически и у формы нет параметра id, а есть только name. Поэтому я вручную расширяю форму:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var f = document.getElementsByName(formName)[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = Element.extend(f); Но форма всё равно не сабмитися как надо. Сериализация проходит нормально (даже в IE), callback вызывается, но возвращаемое значение броузер пытается или интерпретировать и загрузить в окно, или сохранить как файл, хотя не должен.
Post #: 7
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 02:29:02.026666   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
"и у формы нет параметра id"

Что мешает его сделать???
Post #: 8
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 03:10:22.683333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: Pashkela

"и у формы нет параметра id"

Что мешает его сделать???

Страница генерируется автоматически с JSP-страницы, то есть у меня это выглядит так:
&lt;html:form action="/Meeting/Action.do"&gt; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;html:hidden name="MeetingForm" property="meeting.id"/&gt; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;html:hidden property="method" value="foo"/&gt; ... И этот код раскрывается в

&lt;form name="MeetingForm" method="post" action="/plp/Meeting/Action.do"&gt; &nbsp; &nbsp; &nbsp;&nbsp; &lt;input type="hidden" name="meeting.id" value="0"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="method" value="foo"&gt; ... Нет способа заменить name на id прямо на JSP-странице, и отказаться от использования спец тегов тоже нельзя.
Post #: 9
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 03:48:32.463333   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
<FORM method="post" name="MeetingForm" id="бла-бла">

Короче вот, покури:

http://www.captain.at/howto-ajax-form-post-request.php

Там как раз где-то твой случай рассматривается

quote:


function get(obj) {
var poststr = "mytextarea1=" + encodeURI( document.getElementById("mytextarea1").value ) +
"&mytextarea2=" + encodeURI( document.getElementById("mytextarea2").value );
makePOSTRequest('post.php', poststr);
}
&lt;/sсriрt&gt;


&lt;form action="javasсriрt:get(document.getElementById('myform'));" name="myform" id="myform"&gt;
Post #: 10
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 05:02:09.570000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: Pashkela

&lt;FORM method="post" name="MeetingForm" id="бла-бла"&gt;

Ещё раз говорю, тег <form> я не пишу и не могу писать, вместо него мне приходиться писать тег <html:form>, чтобы JSP-процессор на Апаче правильно всё смаппировал и я смог бы нормально обращаться к своим джава-бинам на JSP странице. Если писть просто <form>, то вообще ничего не будет работать. Редактировать получившийся после обработки JSP-страницы HTML-код я не могу - он сразу посылается пользователю. Это как макросы, пишешь одно, раскрывается в другое, и к конечному результату уже не подступишься. А в JSP-теге <html:form> нет аттрибута id, как в HTML теге <form>. Если его туда дописать, то сервер при обработке страницы просто выкинет ошибку, и HTML-страница вообще не будет создана. Так что не могу я использовать для формы id, не-мо-гу.

quote:


Короче вот, покури:

http://www.captain.at/howto-ajax-form-post-request.php

Там как раз где-то твой случай рассматривается

Вообще мой случай начинается со слова Prototype.js, который вроде бы и заточен для работы с аяксом, а на деле банальные вещи фиг сделаешь. Но без его использования приходиться писать гораздо больше кода, который к тому же сложно отлаживать. Поэтому за ссылку спасибо, конечно, но это всё ещё не то, что мне нужно.
Post #: 11
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Prototype.js: как асинхронно запостить форму?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.