Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как перехватить POST? (https://javascript.ru/forum/events/22349-kak-perekhvatit-post.html)

czp 16.10.2011 14:17

как перехватить POST?
 
Добрый день, сразу скажу что я слабо знаю JS, работаю с PHP, но вот стоит задача сделать на AJAX кучу запросов.
Тоесть есть форма, к примеру:

Код:

<FORM action="start.php" method="post" >
<INPUT type="text" NAME="name"  VALUE="test" />
<INPUT type="text" NAME="param" VALUE="test" />
<INPUT type="text" NAME="type"  VALUE="test" />
<INPUT type="text" NAME="numer" VALUE="test"  />
<INPUT type="radio" name="integer" value="1">
<INPUT type="SUBMIT" VALUE="Послать" />
</FORM>

ну вообшем такого типа, при нажатии должно передаваться ну и скажеми записаться в базу, на данный момент все робит, но надо сделать это на аяксе, тоесть на аяксе это тоже вроде робит, но при учете, что в скрипте(JS) я указываю каждое поле, и данные которые должны передаваться, и вместо кнопки субмит ставлю обычную кнопку? и вешаю функцию отправки, на онклик -- это не правильно

так как в дальнейшем таких форм будет много, и в каждой форме инпутов будет разное кол-во.

так вот вопрос как мне сделать так, что бы я писал форму в штмл такого типа как сейчас, с кнопкой субмит, а скрипт вместо того что бы перезагружал страницу, отлавливал это все, считывал данные с формы разложил в масив и передал аяксом в тот фаил пхп???

одним словов как перехватить данные POST???
PS:есле допустил грамматические ошибки, приношу извенения

melky 16.10.2011 14:23

ну при отправке каждой формы (читай:обработчик события отправки) складывать результаты в хеш

средствами jq ЛЕГКО превратить кучу инпутов в хеш типа

{
    %имяПоля% : %значениеПоля% 
}


потом этот хеш перебираете (тоже средствами jq) и каждое свойство записываете в результирующий хеш

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

потом просто это сериализуете (превращаете в строку) тоже средствами jq, и готовую длинную строку отправляете через POST;

только и длине позаботьтесь. по-моему, максимальная длина URL до переполнения буфера - 255 символов

czp 16.10.2011 15:27

извеняюсь за наглость, но можете пример небольшой привести есле не сложно, из 2-х инпутов, а то я как писал почти не знаю JS, что бы мне было легче разобраться
вопросы:
1. JQ - это Jquery?
2. а можно обойтись вот без такого onsubmit="return false;" , что бы в теги формы не писать?что бы вообше в штмл формы ничего не дописывать, а просто как обычная форма, а скрипт сам определяет какую форму я отправляю?

czp 16.10.2011 20:50

Так, все сделал, все работает, один момент остался, скажите как мне сделать что бы JS автоматом перехватывал пост, тоесть в форме я добавил
onsubmit="sendquery(); return false;"

вот без этого onsubmit, можно как то перехватывать????

melky 16.10.2011 23:55

нажать на "добавить в хеш" хотя бы в одной форме и потом на "просмотреть"
<script src="http://yandex.st/jquery/1.6.4/jquery.min.js"></script>
<style>
    form { margin : 5px; } 
    form div { padding: 4px;border-width:5px;border-color:while;border-style:solid; }</style>
<div>
    <form>
        <div style="border-color:#028482;">
            <h2>Форма I.</h2>
            <label for="name">Ваше имя :</label>
            <input type="text" id="name" name="name" value="Вася">
            <br>

            <button>добавить к хешу</button>
        </div>
    </form>
    <form>
        <div style="border-color:#7ABA7A;">
            <h2>Форма II.</h2>
            <label for="surname">Ваша фамилия :</label>
            <input type="text" id="surname" name="surname" value="Пупкин">
            <br>

            <button>добавить к хешу</button>
        </div>
    </form>
    <form>
        <div style="border-color:#B76EB8;">
            <h2>Форма III.</h2>
            <label for="middle_name">Ваше отчество :</label>
            <input type="text" id="middle_name" name="middle_name" value="Ольгович">
            <br>
            
            <button>добавить к хешу</button>
        </div>
    </form>
</div>

<h1>Посмотр данных</h1>
<button id="b">Просмотреть</button>


<script>
BD = {};//тот хеш.

// при отправке формы заполняем бд.
$("form").submit(function(e){
    debugger
    var localBD = $(this).serializeArray();
    
    $.each(localBD, function(){
        BD[this.name] = this.value;
    });
    
    e.preventDefault();
});

// показ бд
$("#b").click(function(){
    var s = ["---------"];
    for(var i in BD)
        s.push("| "+i+"  =  "+BD[i]);
    s.push(s[0]);
    alert(s.join("\n"));
});


</script>

czp 17.10.2011 18:09

я что то не понял как эта конструкция мне поможет в данной ситуации, есле мне просто надо, что бы при нажатие на кнопку сркипт сам определял форму которую я отправляю, при этом не редактировать саму форму в html, и желательно не использовать jquery??

аналог этому onsubmit="return false;" что есть?

в самом скрипте пробовал так писать:
var t = document.forms[0];
t.onsubmit.return (false);

потом так:
function r () {return false;};
var t = document.forms[0];
t.onsubmit = r();

и так:
var t = document.forms[0];
t.onsubmit = return false;

не работает, где ошибка подскажите??

czp 17.10.2011 20:45

впринципе можете тему закрыть, я пошел другим путем, сделал что бы скрипт сам автоматам всем формам дописывал onsubmit="sendquery(); return false;"
melky спасибо за помощь


Часовой пояс GMT +3, время: 18:42.