2011-01-18 11 views
8

Potrzebuję wysłać formularz wysyłając oba żądania POST i GET (z powodu błędów w IE i iframe), jak to zrobić?Wysyłaj zarówno POST, jak i GET w formie:

Wysyłane dane nie są mega bezpieczne, więc nie ma znaczenia, czy można je ustawić za pomocą GET, wystarczy upewnić się, że jest ustawiony w obie strony.

Dzięki za pomoc!

+1

Kilka poniższych odpowiedzi pokazuje, * jak * można to zrobić. Pamiętaj tylko, że żądanie * samo * jest * jednym i tylko jednym * typem, tj. 'Metodą' z'

'. Wynika z tego, że możesz dodać parametry "' GET' style "do żądania' POST', ale nie odwrotnie. – jensgram

+2

Naprawdę chciałbym wiedzieć, dlaczego musisz to zrobić. Nie mogę wymyślić żadnego powodu z mojej głowy. Ponadto dane przesyłane przez POST nie są bezpieczniejsze niż wysyłane przez GET. Jest wysyłany w przejrzysty sposób. Jeśli potrzebujesz zabezpieczeń, musisz użyć protokołu SSL. – Brad

+0

To niemożliwe. Go figure –

Odpowiedz

28

Łatwo: Wystarczy określić dane GET w formularzu URL.

<form method="POST" action="form.php?a=1&b=2&c=3"> 

jednak bardzo dokładnie sprawdza, w jaki sposób dane są używane w skrypcie odbierającym. Nie używaj $_REQUEST - raczej analizuj $_GET i $_POST zgodnie z Twoimi potrzebami iw kolejności, w jakiej ich potrzebujesz.

+0

Woo, podoba mi się. Bezczelny. –

+1

źle mnie zrozumiałeś. Chodzi mi o to, żeby dane były przesyłane jednocześnie jako "POST" i "GET", a nie przekazywać dodatkowych GET "danych". – Cyclone

+1

@Cyclone ah, Rozumiem. Wtedy jest to możliwe tylko przy użyciu programów JS takich jak @casablanca. –

2

forma powinna określić stanowisko wykonaj dostać w url

<form method="post" action="http://www.yourpage.php?firstparam=1&sec=2"> 
. 
. 
</form> 
8

sprawiają, że postać zrobić zwykły POST i użyć JavaScript do replikacji wartości w ciągu zapytania, a także:

HTML:

<form id="myform" method="post" action="..." onsubmit="process()"> 
    ... 
</form> 

JavaScript:

function process() { 
    var form = document.getElementById('myform'); 
    var elements = form.elements; 
    var values = []; 

    for (var i = 0; i < elements.length; i++) 
    values.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value)); 

    form.action += '?' + values.join('&'); 
} 
+0

to jedyny sposób, aby przejść.Zwróć uwagę na limit 2-4 kilobajtów na parametry GET, chociażby –

4

Nie wiesz co bug starasz się obejść, ale można użyć jQuery łatwo modyfikować działanie postaci do zawierać zaksięgowanych wartości:

scenariusz:

function setAction() { 
    $("#myform").attr("action", "/path/to/script/?" + $("#myform").serialize()); 
} 

html:

<form id="myform" action="/path/to/script/" method="post" onsubmit="setAction()"> 
+1

Jedyne, co mógłbym dodać, to .preventDefault() do zdarzenia. następnie wywołaj funkcję click() przycisku przesyłania formularza po. W ten sposób formularz nie może zostać wysłany, dopóki js nie wykona swojego zadania. –

+0

@Robert: Z pewnością można zrobić poprawki. Chciałem po prostu pokazać ogólną koncepcję korzystania z jQuery w tym celu. – webbiedave