Помогите обработать событие onsubmit при post запросе
, Событие onsubmit при post запросе
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.9] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Помогите обработать событие onsubmit при post запросе
, Событие onsubmit при post запросе
|
Сообщ.
#1
,
|
|
|
|
Добрый вечер!
Ситуация следующая, для примера возьмем сайт на ucoz, форма обратной связи http://sfgbsdfgjhfbhdg.ucoz.ru/index/0-3 Задача следующая, заполнить все поля, обработать капчу и отправить запрос. С полями и капчей проблем нет, а вот отправить запрос не получается из за onsubmit, так как нужно запустить функцию проверки корректности введенных данных в форме. Вот форма: ![]() ![]() <form method="post" name="mform" id="mff6lXsd" style="margin:0" onsubmit="fun6lXsd();return false;"> <input type="hidden" name="jkd498" value="1"> <input type="hidden" name="jkd428" value="1"> <table border="0" width="100%" id="table1" cellspacing="1" cellpadding="2"> <tr><td width="35%">Имя отправителя <font color="red">*</font>:</td><td><input type="text" name="f4" size="30" style="width:95%;" maxlength="70"> </td></tr> <tr><td>E-mail отправителя <font color="red">*</font>:</td><td><input type="text" name="f1" size="30" style="width:95%;" maxlength="70"> </td></tr> <tr><td>Web-site:</td><td><input type="text" name="f5" size="30" style="width:95%;" maxlength="70"> </td></tr> <tr><td>Тема письма:</td><td><input type="text" name="f2" size="30" style="width:95%;" maxlength="70"> </td></tr> <tr><td>Текст сообщения <font color="red">*</font>:</td><td><textarea rows="7" name="f3" cols="30" style="width:95%;"></textarea> </td></tr> <tr><td>Оценка сайта:</td><td><select size="1" name="f6"><option>Отлично</option> <option>Хорошо</option> <option>Неплохо</option> <option>Плохо</option> <option>Ужасно</option></select></td></tr> <tr><td>Код безопасности <font color="red">*</font>:</td><td><input type="text" name="f7" size="6" maxlength="5"> <input type="hidden" name="seckey" value="1618199207204069181" /><img alt="" style="margin:0;padding:0;border:0;cursor:pointer;" id="secuImgM" align="absmiddle" title="Обновить код безопасности" onclick="this.src='http://sfgbsdfgjhfbhdg.ucoz.ru/secure/?k=1618199207204069181;s=mail;tm='+Math.random();" src="http://sfgbsdfgjhfbhdg.ucoz.ru/secure/?k=1618199207204069181;s=mail;tm=1392066603" /></td></tr> <tr><td colspan="2" align="center"><br /><input type="submit" value="Отправить сообщение"></td></tr> </table> <input type="hidden" name="id" value="1" /> <input type="hidden" name="a" value="1" /> <input type="hidden" name="o" value="1" /> </form> Вот функция, которая вызывается перед самой отправкой запроса: ![]() ![]() function fun6lXsd() { var act='/mail/', upref='3K16w1wcWRZ', uploadId, wnd; try { var tr=checksubmit(); if(!tr){return false;} } catch(e) {} if(sblmb1==1) { return false; } sblmb1=1; window._uploadIdx = window._uploadIdx ? window._uploadIdx+1 : 1; uploadId = 'up' + window._uploadIdx + '_' + upref; var frm = $('#mff6lXsd')[0]; frm.action=act+'?upsession='+uploadId; wnd = new _uWnd( 'sendMFe1', 'Отправка сообщения', -350, -100, { footerh:25, footerc:' ', autosize:0, modal:1, closeonesc:1, resize:0, hidefooter:0, contentsizeprio:0, onbeforeclose:function(){}, onclose:function(wnd){ if(wnd._myuploadTimer) clearTimeout(wnd._myuploadTimer); wnd._myuploadTimer=null; } }, { form:frm } ); wnd._myuploadStarted=0; _uploadCheck.call({upload_wnd:wnd.idx,upload_id:uploadId}); } Можно ли как то не используя веббраузер обработать это событие? POST запрос не отправляется если функция не вернет ответ, проверка корректности заполнения формы. Вернее он отправляется, но без вызова функции сервер отдает ответ Connection = CLOSE. |
|
Сообщ.
#2
,
|
|
|
|
Неужели никто не знает?
|
|
Сообщ.
#3
,
|
|
|
|
Если не требуется ничего аплоадить, то надо смотреть, что делает checksubmit()
Добавлено Да, и юзай подсветку кода не паскаля, а соответствующую. |
|
Сообщ.
#4
,
|
|
|
|
FrOsT, я не силен в JS, но попробую разобрать функцию, как я ее понимаю.
![]() ![]() function funitbDO() { // Вызываем функцию var act='/mail/', upref='77KB1wdisF', uploadId, wnd; // Объявляем переменные и загружаем значения - act='/mail/', upref='77KB1wdisF', uploadId, wnd try { var tr=checksubmit(); if(!tr){return false;} } catch(e) {} // Тут как я понял идет проверка на корректность заполнения формы (функцию checksubmit на странице не нашел, но так как это проверка и форма заполнена верно, думаю можно это опустить...) if(sblmb1==1) { return false; } // Проверяем переменную на равенство, если равна 1, то так же return false; sblmb1=1; // Прошли все проверки и приступаем к составлению запроса, присваиваем sblmb1 = 1; window._uploadIdx = window._uploadIdx ? window._uploadIdx+1 : 1; // Присваиваем глобальной переменной window._uploadIdx, при каждом запросе увеличиваем на + 1 uploadId = 'up' + window._uploadIdx + '_' + upref; // Затем в переменную uploadId присваиваем 'up1_77KB1wdisF'; var frm = $('#mffitbDO')[0]; // Вызываем функцию и присваиваем значение TRUE = 0, mffitbDO - это id формы, я так понимаю id = 0, то беж проверка пройдена и можно отправлять запрос... frm.action=act+'?upsession='+uploadId; // Составляем запрос для отправки '/mail/?upsession=up1_77KB1wdisF' wnd = new _uWnd( // Присваиваем и вызываем функцию new _uWnd, которая ХЗ что делает, все функции внутри этой функции опишу ниже.... 'sendMFe1', 'Отправка сообщения', -350, -100, { footerh:25, footerc:' ', autosize:0, modal:1, closeonesc:1, resize:0, hidefooter:0, contentsizeprio:0, onbeforeclose:function(){}, onclose:function(wnd){ if(wnd._myuploadTimer) clearTimeout(wnd._myuploadTimer); // Если условие выполнено то очищаем и присваиваем null; wnd._myuploadTimer=null; } }, { form:frm } ); wnd._myuploadStarted=0; // wnd._myuploadStarted присваиваем ноль.... _uploadCheck.call({upload_wnd:wnd.idx,upload_id:uploadId}); // Запускаем функцию, которая тоже ХЗ что делает. } А вот функции, которые запускались внутри этой функции: ![]() ![]() [B]$[/B](function(){_uBuildMenu('#uMenuDiv1',0,document.location.href+'/','uMenuItemA','uMenuArrow',2500);}) <a href="javascript://" rel="nofollow" onclick="[B]new _uWnd[/B]('LF',' ',-250,-110,{autosize:0,closeonesc:1,resize:1},{url:'/index/40'});return false;" title="Вход"><!--<s3087>-->Вход<!--</s>--></a> function _uploadCheck() { var w=_uWnd.all[this.upload_wnd]; if(!w || w.state.destroyed) return; w._myuploadTimer=setTimeout("_uploadProgress('"+this.upload_id+"',"+this.upload_wnd+")",3000); } function _uploadProgress(upId,widx) { if(_uWnd.all[widx]) _uWnd.all[widx]._myuploadTimer=null; var o={upload_wnd:widx,upload_id:upId,dataType:'json',type:'GET',timeout:5000,cache:1,success:_uploadTick,error: function(a, b, c) { console.log('Test!', a, '-', b, '-', c); }}; try { _uAjaxRequest("/.uploadstatus?upsession="+upId,o); } catch(e) { _uploadCheck.call(o,null,'error'); } } function _uploadTick(data,st) { var w=_uWnd.all[this.upload_wnd]; if(!w || w.state.destroyed) return; if(data.state=='error') { if(data.status==413) _uWnd.alert('Суммарный размер файлов превышает допустимое значение 15 МБ','',{w:230,h:80,tm:3000}); else _uWnd.alert('Ошибка соединения, попробуйте позже ('+data.status+')','',{w:230,h:80,tm:3000}); w.close(); sblmb1=0; return; } else if(data.state=='starting' && w._myuploadStarted) { _uWnd.alert('Ошибка соединения, попробуйте позже','',{w:230,h:80,tm:3000}); w.close(); return; } else if(data.state=='uploading' || data.state=='done') { var cents; if(data.state=='done' || data.size==0) { w.footer(''); } else { cents=Math.floor(data.received/data.size*1000)/10; w.footer('<div style="border:1px solid;position:relative"><div class="myWinTD2" style="width:'+Math.floor(cents)+'%;height:20px"></div><div style="text-align:center;position:absolute;left:0;top:0;width:100%;height:20px;font-size:14px">'+cents+'% ('+Math.floor(data.received/1024)+' Kb)</div></div>'); } w._myuploadStarted=1; if(data.state=='done') { sblmb1=0; return; } } _uploadCheck.call(this); } var sblmb1=0; Собственно вопрос, что делать? Уже есть желание плюнуть и прикрутить браузер для обработки всей этой каши:) |
|
Сообщ.
#5
,
|
|
|
|
Serzant, ну есть же подсветка JS, зачем его как паскаль подсвечивать...
А основная функция, насколько я могу судить, по большей части рассчитана на заливку файлов; надо бы прогнать трассировкой, но мне кажется, что если заливку выкинуть, то нужный код сократится до нескольких строчек. Тем не менее, вариант с браузером, имхо, самый правильный. Т.к. если код скриптов на сайте поменяется, придется заново лезть и разбираться в изменениях, и пересобирать прогу |
|
Сообщ.
#6
,
|
|
|
|
FrOsT, не сразу нашел подсветку JS.
По поводу запроса разобрался, сам немного ступил, можно обойтись и без этого события:) |