[JS] doorverwijzen in functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bram Boos

Bram Boos

16/02/2011 21:47:43
Quote Anchor link
Lang geleden dat ik op PHPhulp een vraag heb gesteld maar ik loop nu een beetje vast op het gebied van JavaScript. Ik ben nu eenmaal client-sided niet zo sterk.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>

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?
 
PHP hulp

PHP hulp

03/12/2024 18:12:26
 

16/02/2011 21:55:33
Quote Anchor link
Gebruik geen inline methode van document, maar gebruik 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.
 
Bram Boos

Bram Boos

16/02/2011 22:11:48
Quote Anchor link
Nou aangezien ik een volgende en vorige knop heb welke beide eerst de form moeten submitten en dan naar de volgende of vorige pagina moeten gaan...
Gewijzigd op 18/02/2011 16:38:35 door Bram Boos
 
Bram Boos

Bram Boos

18/02/2011 16:38:44
Quote Anchor link
BUMPER
 
Harry nvt

Harry nvt

18/02/2011 18:01:53
Quote Anchor link
Wat ik altijd doe is volgende:
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)
PHP script in nieuw venster Selecteer het PHP script
1
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";
  }
}

?>

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
 
Bram Boos

Bram Boos

19/02/2011 17:18:56
Quote Anchor link
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.
 
Harry nvt

Harry nvt

19/02/2011 17:55:47
Quote Anchor link
dat had ik ook begrepen ja.. of bedoel je dat de verwerking van de submit, dus de form target, sorry, form action, die andere pagina moet zijn?
Gewijzigd op 19/02/2011 18:05:48 door Harry nvt
 
Bram Boos

Bram Boos

19/02/2011 20:28:59
Quote Anchor link
Ik ben eruit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<script type="text/javascript">
function save(link){
document.save.submit();
location.href=link;
}
</script>

En dat roep ik aan met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="javascript:save('pagina.php')">pagina</a>
 
Harry nvt

Harry nvt

19/02/2011 23:47:11
Quote Anchor link
Twee dingetjes:
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.
 
Bram Boos

Bram Boos

20/02/2011 13:45:46
Quote Anchor link
Hmm, daar heb je wel weer gelijk in. Zou ik misschien de var link ook kunnen meegeven in php zodat ik bij het uitvoeren van de form met header kan doorverwijzen.

Volgensmij klopt hier helemaal niks van maar zou dit kunnen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.''); ?>
 
Harry nvt

Harry nvt

20/02/2011 16:11:56
Quote Anchor 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.
 
Bram Boos

Bram Boos

22/02/2011 11:33:27
Quote Anchor link
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...
 
Bram Boos

Bram Boos

03/03/2011 00:01:55
Quote Anchor link
Even een bumpje omhoog. Bij het gebruik van dit script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<script type="text/javascript">
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.
 
Bram Boos

Bram Boos

13/03/2011 17:30:35
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->schop = 'auw';
$bump = $this->schop;
return $bump;
?>


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?
 
Vincent Huisman

Vincent Huisman

13/03/2011 18:32:33
Quote Anchor link
ik weet dat dit kan met jquery, voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
            }
        }
    });  
}
 

13/03/2011 18:59:30
Quote Anchor link
Bram Boos op 13/03/2011 17:30:35:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->schop = 'auw';
$bump = $this->schop;
return $bump;
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return $this->schop = 'auw';
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.