На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Помогите обработать событие onsubmit при post запросе , Событие onsubmit при post запросе
    Добрый вечер!

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

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

    Вот форма:

    ExpandedWrap disabled
      <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>



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

    ExpandedWrap disabled
      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.
      Неужели никто не знает?
        Если не требуется ничего аплоадить, то надо смотреть, что делает checksubmit()

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

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


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

          ExpandedWrap disabled
            [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;


          Собственно вопрос, что делать? Уже есть желание плюнуть и прикрутить браузер для обработки всей этой каши:)
            Serzant, ну есть же подсветка JS, зачем его как паскаль подсвечивать...
            А основная функция, насколько я могу судить, по большей части рассчитана на заливку файлов; надо бы прогнать трассировкой, но мне кажется, что если заливку выкинуть, то нужный код сократится до нескольких строчек.
            Тем не менее, вариант с браузером, имхо, самый правильный. Т.к. если код скриптов на сайте поменяется, придется заново лезть и разбираться в изменениях, и пересобирать прогу
              FrOsT, не сразу нашел подсветку JS.
              По поводу запроса разобрался, сам немного ступил, можно обойтись и без этого события:)
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0.0754 ]   [ 15 queries used ]   [ Generated: 22.09.26, 13:06 GMT ]