Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2014, 01:18   #1
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию Помогите обработать событие onsubmit при post запросе

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

Ситуация следующая, для примера возьмем сайт на ucoz, форма обратной связи http://sfgbsdfgjhfbhdg.ucoz.ru/index/0-3

Задача следующая, заполнить все поля, обработать капчу и отправить запрос. С полями и капчей проблем нет, а вот отправить запрос не получается из за onsubmit, так как нужно запустить функцию проверки корректности введенных данных в форме.

Вот форма:

PHP код:
<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
Вот функция, которая вызывается перед самой отправкой запроса:

PHP код:
function fun6lXsd() {
                        var 
act='/mail/'upref='3K16w1wcWRZ'uploadIdwnd;
                        try { var 
tr=checksubmit(); if(!tr){return false;} } catch(e) {}
                        if(
sblmb1==1) { return false; }
                        
sblmb1=1;
                        
window._uploadIdx window._uploadIdx window._uploadIdx+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._myuploadTimerclearTimeout(wnd._myuploadTimer);
                                    
wnd._myuploadTimer=null;
                                }
                            },
                            {
                                
form:frm
                            
}
                        );
                        
wnd._myuploadStarted=0;
                        
_uploadCheck.call({upload_wnd:wnd.idx,upload_id:uploadId});
                    } 
Можно ли как то не используя веббраузер обработать это событие?
Serzant вне форума Ответить с цитированием
Старый 11.02.2014, 02:27   #2
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию

Есть какие идеи? Как реализовать такой запрос не используя веббраузер и ему подобные?
Serzant вне форума Ответить с цитированием
Старый 11.02.2014, 10:39   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Можно ли как то не используя веббраузер обработать это событие?
Разобраться в JS коде и переделать. По сути там простаячвеб-форма, только ACTION рандомный.
Человек_Борща вне форума Ответить с цитированием
Старый 11.02.2014, 15:14   #4
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию

К сожалению знания JS практически нулевые, раньше никогда не сталкивался с подобными формами, где помимо основного запроса нужно еще обработать событие.

Я думаю там не просто веб форма чтобы делать ACTION рандомным, так как сам url в течении одной сессии не изменяется, вот пример http:// sfgbsdfgjhfbhdg.ucoz.ru/mail/?upsession=up3_3u4xD1wd9Zb, вот этот код 3u4xD1wd9Zb при каждом запросе один и тот же, он меняется только при обновлении страницы, up3_ это количество попыток отправить запрос. Исходя из этого action верный, просто еще идет проверка на корректность заполненной формы, я так понимаю если форма заполнена верно то функция возвращает false или true и тогда успешно отправляется запрос, но если что то пошло не так то со стороны сервера закрывается соединение CONNECTION = CLOSE. Получается нужно каким то образом дать сигнал что все заполнено верно, после чего отправить запрос.

Одна надежда на вас, профессионалы, помогите разобраться пжл, либо дайте направление в какую сторону копать, буду разбираться.

Последний раз редактировалось Serzant; 11.02.2014 в 16:31.
Serzant вне форума Ответить с цитированием
Старый 11.02.2014, 23:45   #5
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию

Неужели никто не знает?
Serzant вне форума Ответить с цитированием
Старый 12.02.2014, 15:11   #6
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию

Я не силен в JS, но попробую разобрать функцию, как я ее понимаю.

PHP код:
function funitbDO() {                                    // Вызываем функцию
var act='/mail/'upref='77KB1wdisF'uploadIdwnd;               // Объявляем переменные и загружаем значения - 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;   // Присваиваем глобальной переменной 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._myuploadTimerclearTimeout(wnd._myuploadTimer);         // Если условие выполнено то очищаем и присваиваем null;
wnd._myuploadTimer=null;
}
},
{
form:frm
}
);
wnd._myuploadStarted=0;                                        // wnd._myuploadStarted присваиваем ноль....  
_uploadCheck.call({upload_wnd:wnd.idx,upload_id:uploadId});    // Запускаем функцию, которая тоже ХЗ что делает.

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

PHP код:
[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.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(abc) { 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.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
Собственно вопрос, что делать? Уже есть желание плюнуть и прикрутить браузер для обработки всей этой каши
Serzant вне форума Ответить с цитированием
Старый 13.02.2014, 13:40   #7
Serzant
 
Регистрация: 10.02.2014
Сообщений: 8
По умолчанию

Наконец то разобрался, сам немного ступил
Serzant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработать событие только один раз Suliman1 C# (си шарп) 2 03.09.2012 15:45
Обработать ответ от сервера [POST] sice Общие вопросы Delphi 3 26.01.2011 15:02
ОБработать сразу все POST и GET запросы Delphinchik PHP 7 21.01.2011 16:31
Как при Post-запросе получать только кукисы Voody Работа с сетью в Delphi 11 14.12.2009 21:25