Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Способы обработки события onsubmit при post? 
:(
    Опции темы
Serzant
Дата 11.2.2014, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.2.2014

Репутация: нет
Всего: нет



Добрый вечер!

Ситуация следующая, для примера возьмем сайт на 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>


Вот функция, которая вызывается перед самой отправкой запроса:

Код


CollapsedWrap disabledLine numbers off

    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. 
PM MAIL   Вверх
Serzant
Дата 11.2.2014, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.2.2014

Репутация: нет
Всего: нет



Неужели никто не знает?
PM MAIL   Вверх
Serzant
Дата 12.2.2014, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.2.2014

Репутация: нет
Всего: нет



Я не силен в 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});    // Запускаем функцию, которая тоже ХЗ что делает.
}


А вот функции, которые запускались внутри этой функции:

Код
$(function(){_uBuildMenu('#uMenuDiv1',0,document.location.href+'/','uMenuItemA','uMenuArrow',2500);})
<a href="javascript://" rel="nofollow" onclick="new _uWnd('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;


Собственно вопрос, что делать? Уже есть желание плюнуть и прикрутить браузер для обработки всей этой каши:)
PM MAIL   Вверх
Serzant
Дата 13.2.2014, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.2.2014

Репутация: нет
Всего: нет



Наконец то разобрался, сам немного ступил:)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.