Prototype.js: как асинхронно запостить форму?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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) {
var m = document.getElementsByName("method")[0]; // нужно конкретно для моей задачи
m.value = serverMethod;
var f = document.getElementsByName(formName)[0];
//var params = f.serialize(); // это строчку IE вообще не понял, почему?
var params = serializeForm(form); // соответственно, моя замена предыдущей функции
var ajax = new Ajax.Request(url, {
method: 'post',
parameters: params,
onSuccess: callback }
);
} Если не считаь бага с f.serialize(), в IE работает как надо. Firefox и Opera сабмитят форму (причём оба почему-то сразу дважды), и пытаются перезагрузить всю страницу.
|
|
|
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-01 19:46:43.966666
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
Что пишут лиса и опреа в консолях JavaScript? Обязательно с использованием prototype?
|
|
|
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-01 21:19:05.330000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Так в том то и дело, что ничего не пишут. Покапался в серверном коде, так броузеры вообще решили, что ответ сервера нужно сохранять как файл. Очень хотелось бы сделать это именно через прототайп.
|
|
|
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); }
|
|
|
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), и получается новый объект с новыми свойствами.
|
|
|
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 хотя если честно в аяксе не бум-бум
|
|
|
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 02:26:05.696666
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Использовать напрямую функцию $() я вообще не могу, т.к. код страницы генерируется автоматически и у формы нет параметра id, а есть только name. Поэтому я вручную расширяю форму:
var f = document.getElementsByName(formName)[0];
f = Element.extend(f); Но форма всё равно не сабмитися как надо. Сериализация проходит нормально (даже в IE), callback вызывается, но возвращаемое значение броузер пытается или интерпретировать и загрузить в окно, или сохранить как файл, хотя не должен.
|
|
|
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 02:29:02.026666
|
|
|
Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
"и у формы нет параметра id" Что мешает его сделать???
|
|
|
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-страницы, то есть у меня это выглядит так:
<html:form action="/Meeting/Action.do">
<html:hidden name="MeetingForm" property="meeting.id"/>
<html:hidden property="method" value="foo"/>
... И этот код раскрывается в
<form name="MeetingForm" method="post" action="/plp/Meeting/Action.do">
<input type="hidden" name="meeting.id" value="0">
<input type="hidden" name="method" value="foo">
... Нет способа заменить name на id прямо на JSP-странице, и отказаться от использования спец тегов тоже нельзя.
|
|
|
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); } </sсriрt> <form action="javasсriрt:get(document.getElementById('myform'));" name="myform" id="myform">
|
|
|
RE: Prototype.js: как асинхронно запостить форму? - 2008-12-02 05:02:09.570000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: Pashkela <FORM method="post" name="MeetingForm" id="бла-бла"> Ещё раз говорю, тег <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, который вроде бы и заточен для работы с аяксом, а на деле банальные вещи фиг сделаешь. Но без его использования приходиться писать гораздо больше кода, который к тому же сложно отлаживать. Поэтому за ссылку спасибо, конечно, но это всё ещё не то, что мне нужно.
|
|
|
|
|