[JS] doorverwijzen in functie
Ik maak gebruik van de volgende code om een form te submitten maar nu wil ik aan de hand van de a href waarop geklikt is de gebruiker naar een aparte pagina doorverwijzen. Nu ziet de link er zo uit: javascript: submitform() maar nou zou ik pagina waar de gebruiker heen moet graag mee willen geven in de submitform op deze manier: submitform(pagina.php?id=22).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function submitform()
{
if(document.myform.onsubmit &&
!document.myform.onsubmit())
{
return;
}
document.myform.submit();
}
</script>
function submitform()
{
if(document.myform.onsubmit &&
!document.myform.onsubmit())
{
return;
}
document.myform.submit();
}
</script>
Nu zoek ik een manier om de gebruiker netjes door te verwijzen. Is dit een goede (en uitvoerbare) manier of kan ik het beter anders aanpakken?
document.getElementByID.
Wat je nu precies wilt snap ik niet echt. Sowieso wat dit moet doen snap ik niet echt. Je doet nu namelijk gewoon een submit van de form. De achterliggende code moet dan gewoon de redirect doen.
Gebruik geen inline methode van document, maar gebruik Wat je nu precies wilt snap ik niet echt. Sowieso wat dit moet doen snap ik niet echt. Je doet nu namelijk gewoon een submit van de form. De achterliggende code moet dan gewoon de redirect doen.
Gewijzigd op 18/02/2011 16:38:35 door Bram Boos
BUMPER
je geeft de knop waar op geklikt wordt, kan ook een submit button zijn, een onclick attribuut mee. Die onclick geeft een van te voren gedefinieerde hidden formfield een bepaalde waarde.
document.myform.hiddenfield.value="next";
of
document.myform.hiddenfield.value="previous";
Als de form gesubmit wordt naar zichzelf, dan ga je daar waar je de post opvangt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if ($_POST){
if ($_POST['hiddenfield']=="next"){
echo '<script language="javascript" type="text/javascript">'."\n";
echo "<!--\n".'location.href="nextpage.php";'."\n";
echo "//--></script>\n";
}
if ($_POST['hiddenfield']=="previous"){
echo '<script language="javascript" type="text/javascript">'."\n";
echo "<!--\n".'location.href="previouspage.php";'."\n";
echo "//--></script>\n";
}
}
?>
if ($_POST){
if ($_POST['hiddenfield']=="next"){
echo '<script language="javascript" type="text/javascript">'."\n";
echo "<!--\n".'location.href="nextpage.php";'."\n";
echo "//--></script>\n";
}
if ($_POST['hiddenfield']=="previous"){
echo '<script language="javascript" type="text/javascript">'."\n";
echo "<!--\n".'location.href="previouspage.php";'."\n";
echo "//--></script>\n";
}
}
?>
Dat is het in een notedop. Om naar de vorige pagina code even uitbreiden.
De action van de form op $_SERVER['PHP_SELF'] zetten uiteraard.
Ik doe zelf in dat POST gedeelte de server-side validatie, en maak dan die javascript redirect in het post gedeelte alleen maar mogelijk als de validatie ok is (if $valid..) maar dat had je zelf ook al wel bedacht. (Ik sta 'naar vorige pagina' wel toe zonder validatie, maar 'naar volgende pagina' niet, maar dat is off-topic.)
Quote:
@Karlkarl De achterliggende code moet dan gewoon de redirect doen.
Dat is het 'm nu net.. maar moet dus wel via javascript
Quote:
Gebruik geen inline methode van document, maar gebruik document.getElementByID
Dat moet ik mij ook ter harte nemen, maar als je het niet doet, kun je daar fout mee gaan?
Gewijzigd op 18/02/2011 18:19:32 door Harry nvt
Ik ben even verder aan het denken geweest maar eigenlijk is het doel dat gewoon de form wordt gesubmit als er naar een andere pagina wordt gegaan.
Gewijzigd op 19/02/2011 18:05:48 door Harry nvt
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<script type="text/javascript">
function save(link){
document.save.submit();
location.href=link;
}
</script>
function save(link){
document.save.submit();
location.href=link;
}
</script>
En dat roep ik aan met:
1) in document.save.submit(); is "save" the naam van de form? Moet haast wel, want een attribuut save in javacript lijkt er niet te zijn. Beetje verwarrend, omdat de functie ook 'save' heet.
2) Zou wel controleren of het in alle browsers werkt. In mijn beleving spring je, als je document.save.submit() doet, uit de flow van de functie en wordt de location.href niet meer gezien, immers de pagina wordt opnieuw geladen door de submit actie. Ik denk dat je te vroeg juicht; goeie kans dat sommige browsers alleen de submit pakken en andere alleen de location href. Meen me vaag te herinneren dat ik eertijds hier ook mee klooide en dat ik bewust gekozen heb voor de redirect explicitiet in de tweede run van de pagina, dus na de submit in de verwerking van $_POST.
Volgensmij klopt hier helemaal niks van maar zou dit kunnen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function save(link){
document.save.submit();
}
function linkto(){
linkto()=link;
}
</script>
<?php
$link = 'javascript:linkto()';
header('Location: '.$link.''); ?>
function save(link){
document.save.submit();
}
function linkto(){
linkto()=link;
}
</script>
<?php
$link = 'javascript:linkto()';
header('Location: '.$link.''); ?>
Denk 't nie. De php header verdraagt dit niet boven zich, en het doorgeven van een javascript var naar php is lastig; zoals hier staat gaat niet werken. Een header is op zich leuk, maar aangezien je toch al javascript gebruikt kun je net zo goed ook javascript gebruiken om te redirecten. Ik heb mijn manier nu in zo'n 10 multipage forms zitten, en werkt prima.
Tja, opzich ben in niet zo'n grote fan van javascript aangezien elke browser er anders mee omgaat. Tot nu toe werkt de code die ik eerder gaf goed in alle meest voorkomende browsers...
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<script type="text/javascript">
function save(link){
document.save.submit();
location.href=link;
}
</script>
function save(link){
document.save.submit();
location.href=link;
}
</script>
Gaat alles goed op de localhost maar als de query iets te lang duurt verwijst die al door voordat de form gepost is. Is er niet een manier om te kijken of de query klaar is of een soort timeout?
Google and me zijn ten einde raad.
En nu even serieus: intussen heb ik geprobeerd een timeout erin te zetten maar dan verwijst die niet meer door dus ik zal iets aan de PHP kant moeten proberen. Iemand ideeen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function onSubmit()
{
$.ajax(
{
type: "POST",
url: "verwerk.php", // De pagina waar de request naar toe gaat
data: "pagina=paginanaam&data="+watinfo, // De post info, lijkt op get maar haalt het op met post
// in verwerk.php doe je dan $_POST['pagina'] (= paginanaam)
// en $_POST['data'] (= de info die in die string staat)
complete: function(data)
{
if(data.responseText != "fout") // Wanneer er in de verwerk.php als echo staat "fout" dan kan je nog een foutmelding geven
{
alert("foutje");
}
else // Wanneer er dus iets (of niets) anders is ge-echoed dan fout
{
location.href = "jepagina.php";
}
}
});
}
{
$.ajax(
{
type: "POST",
url: "verwerk.php", // De pagina waar de request naar toe gaat
data: "pagina=paginanaam&data="+watinfo, // De post info, lijkt op get maar haalt het op met post
// in verwerk.php doe je dan $_POST['pagina'] (= paginanaam)
// en $_POST['data'] (= de info die in die string staat)
complete: function(data)
{
if(data.responseText != "fout") // Wanneer er in de verwerk.php als echo staat "fout" dan kan je nog een foutmelding geven
{
alert("foutje");
}
else // Wanneer er dus iets (of niets) anders is ge-echoed dan fout
{
location.href = "jepagina.php";
}
}
});
}
Bram Boos op 13/03/2011 17:30:35:
En nu even serieus: intussen heb ik geprobeerd een timeout erin te zetten maar dan verwijst die niet meer door dus ik zal iets aan de PHP kant moeten proberen. Iemand ideeen?
En nu even serieus: intussen heb ik geprobeerd een timeout erin te zetten maar dan verwijst die niet meer door dus ik zal iets aan de PHP kant moeten proberen. Iemand ideeen?