js form field zetten en posten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Ik heb een probleem met het posten van een form field, dat gezet wordt via een JS-functie. Via een onclick link wil ik een waarde in mijn formulier zetten om vervolgens te submitten. Nu wordt de waarde van het veld in het formulier weliswaar goed gezet door de functie (lees: ik zie dat de juiste waarde in het tekstvak verschijnt vlak voor de submit), maar op het moment dat er gesubmit wordt, blijkt de waarde $_POST['xmlData'] leeg te zijn (als ik de $_POST-array print)

code:
1
2
3
4
5
6
7
8
<script type="text/javascript">
   <!--
    function process_form() {
    document.forms["myform"]["xmlData"].value = getXmlData();
    document.forms["myform"].submit();
    }
   // --->
</script>


met het bijbehorende formulier:

code:
1
2
3
4
<form name="myform" method="post" action="/step/2">
        <input type="text" size="10" name="xmlData" value="" />
        <input type="button" onclick="process_form();" value="Stap 2" />
</form>


Nu ben ik totaal geen JS-kenner, maar kan iemand me uitleggen waarom de field-value wel gezet wordt, maar hij bij de submit verloren gaat?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Misschien is het handig om ook wat van de code getXmlData(); te laten zien?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

<input type="text" size="10" name="xmlData" value="" />
Hoop dat je XML niet meer dan 1 regel of langer dan 10 tekens is :P

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Noork schreef op maandag 08 juni 2009 @ 23:25:
Misschien is het handig om ook wat van de code getXmlData(); te laten zien?
maakt toch niet uit? ik zie dat het resultaat van die code in het text-veld komt, dus die code werkt...(ik heb ter test ook gewoon een fixed value opgegeven. Ook die wordt dan netjes in het tekstveld gezet na de click, maar verdwijnt weer na de submit..

[ Voor 20% gewijzigd door Dentist op 08-06-2009 23:43 ]


Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Bosmonster schreef op maandag 08 juni 2009 @ 23:29:
[...]


Hoop dat je XML niet meer dan 1 regel of langer dan 10 tekens is :P
want? De size van het tekstveld heeft toch niets te maken met de lengte van de string die erin wordt gezet.. Als het nou maxlength was.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Is de waarde ook in de XML notatie? Met <hoi>zo dus?</hoi> Werkt het wel zonder XML-notatie?

Laat maar zitten. Heb jouw code getest. Werkt hier prima met een eenvoudige string, ook in XML. Vreemd.

[ Voor 38% gewijzigd door Noork op 09-06-2009 00:00 ]


Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
Ach zo, het volgende.
Wat ik wel eens tegen kom is dat (voornamelijk Firefox) als je een value set van een veld, een form submit deze niet ziet! (Met name met gebruik van JS frameworks a lá Prototype en jQuery) Erg apart. Wat ik daar tegen doe is direct de DOM veranderen (het attribuut in de HTML zelf wijzigigen, in principe).

Even kijken, dat ziet er volgens mij als volgt uit:
JavaScript:
1
document.getElementById('bla').setAttribute("value","hiephoi");


Het verschil: sommige browsers veranderen met "value" hun interne buffer van het veld, en met een form submit knallen ze de DOM-values naar je script. Beetje krom inderdaad maar goed. In bovenstaand geval zet je in de DOM de value, in plaats van in de buffer.

Hoop dat je hier iets mee kan.

[ Voor 3% gewijzigd door Nexz op 09-06-2009 08:57 ]


Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Thanks, maar ook daarmee lukt het helaas niet. :/

ik ga het maar met een sessie of cookie proberen ofzo :(

[ Voor 4% gewijzigd door Dentist op 09-06-2009 09:18 ]


Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
1 ding dat ik nog kan bedenken:
Probeer het eens met ID's. Kijk of het dan werkt.

Dus:
JavaScript:
1
2
3
4
5
6
7
8
<script type="text/javascript">
   <!--
    function process_form() {
    document.getElementById("xmlData").value = getXmlData();
    document.getElementById("mijnFormulier").submit();
    }
   // --->
</script>


en

HTML:
1
2
3
4
<form id="mijnFormulier" name="myform" method="post" action="/step/2">
        <input type="text" size="10" id="xmlData" name="xmlData" value="" />
        <input type="button" onclick="process_form();" value="Stap 2" />
</form>


Hij zou overigens wel gewoon moeten werken op jou manier, maar ik meen me te herinneren dat .forms ooit proprietary zooi van MS was? Of heb ik het nu bij het verkeerde eind?

En dan komt er nog iets bij me op als dat ook niet werkt:
In plaats van een button waarmee je process_form() aanroept, probeer dit in te onSubmit van je form te zetten (wel return true; doen!) En van je knop een type=submit maken.

Edit:
En oppassen met ID's en names trouwens, IE heeft leuke bugjes hiermee :).

[ Voor 4% gewijzigd door Nexz op 09-06-2009 09:21 ]


Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Still no cigar.. helaas 8)7

Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
Welke browser gebruik je 8)7

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Blijf het vreemd vinden. Hoe print je de post naar het scherm? :) Misschien zie je de content niet omdat deze met <xml> tags is aangegeven? Wellicht kun je wat meer code laten zien...

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
@Nexz: FF/Chrome/IE

@Noork:
code:
1
2
3
print '<pre>';
print_r($_POST);
print '</pre>';

[ Voor 78% gewijzigd door Dentist op 09-06-2009 09:46 ]


Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
HTML:
1
action="/step/2"


Dit is een PHP script? Of gebruik je een rewrite engine?

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Een rewrite engine, die gewoon naar een php-bestand verwijst...

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:37

crisp

Devver

Pixelated

Dentist schreef op dinsdag 09 juni 2009 @ 09:51:
Een rewrite engine, die gewoon naar een php-bestand verwijst...
check dan eens of de rewrite niet een redirect is waarbij de POST gegevens verloren gaan.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Kun je het script niet even in de meest basale vorm en zonder rewrite testen? M.a.w. debuggen. Werkt onderstaand script wel voor jou?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript">
    function process_form() {
        document.forms["myform"]["xmlData"].value = "<hoi>XML data</hoi>";
        document.forms["myform"].submit();
    }
</script>

<form name="myform" method="post" action="test.php">
        <input type="text" size="30" name="xmlData" value="" />
        <input type="button" onclick="process_form();" value="Submit" />
</form>

<? 
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Heb even rechtstreeks naar een ander script gepost (volgens mij dus zonder de rewrite-regels), maar $_POST blijft leeg..

Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Noork schreef op dinsdag 09 juni 2009 @ 09:55:
Kun je het script niet even in de meest basale vorm en zonder rewrite testen? M.a.w. debuggen. Werkt onderstaand script wel voor jou?
Ha. hoop! :) deze doet het wel...

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Waarom gebruik je niet gewoon de standaard functionaliteit van bijvoorbeeld prototype?

JavaScript:
1
2
3
4
5
6
7
var myAjax = new Ajax.Request(
    "/step/2", 
    {
        method: 'post', 
        parameters: "xmlData=" + getXmlData(), 
        onComplete: showResponse
    });


jQuery kan zoiets geheid ook.

[ Voor 38% gewijzigd door BCC op 09-06-2009 10:08 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
BCC schreef op dinsdag 09 juni 2009 @ 10:03:
Waarom gebruik je niet gewoon de standaard functionaliteit van bijvoorbeeld prototype?

JavaScript:
1
2
3
4
5
6
7
var myAjax = new Ajax.Request(
    "/step/2", 
    {
        method: 'post', 
        parameters: "xml=" + getXmlData(), 
        onComplete: showResponse
    });


jQuery kan zoiets geheid ook.
(omdat ik een js-noep ben?

Ben nu nog wat verder aan het debuggen en ga dit ook even proberen.. thanks.

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

:) Protype is hier: http://www.prototypejs.org/ te krijgen.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
@BCC: Ook al zou het via Ajax gaan, je moet altijd rekening houden met graceful degradation, m.a.w. ook clients ondersteunen die geen Ajax mogelijkheid hebben. (Althans, "moeten".. als je dit ook als doelgroep wilt hebben). Ik hou er zoveel mogelijk rekning mee iig :)

Edit:
Heb zelf ook lang Prototype gebruikt, ik vind jQuery nu persoonlijk wat makkelijker werken nu het volwassen is geworden (al een tijdje), vooral met chaining support e.d. Maar dat is ieder voor zich natuurlijk ;)

[ Voor 29% gewijzigd door Nexz op 09-06-2009 10:16 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Ik houd al een tijdje geen rekening meer met mensen die geen javascript hebben. Volgens mij is dat reeel. Je moet op een gegeven moment stoppen met platen maken, laat die mensen maar eindelijk eens een CD speler kopen :)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Dentist schreef op maandag 08 juni 2009 @ 23:42:
[...]


want? De size van het tekstveld heeft toch niets te maken met de lengte van de string die erin wordt gezet.. Als het nou maxlength was.
Ow je hebt gelijk, verkeerd gelezen :+
BCC schreef op dinsdag 09 juni 2009 @ 10:20:
Ik houd al een tijdje geen rekening meer met mensen die geen javascript hebben. Volgens mij is dat reeel. Je moet op een gegeven moment stoppen met platen maken, laat die mensen maar eindelijk eens een CD speler kopen :)
Heeft weinig te maken met willen, meer met kunnen. Denk aan mobiele apparatuur of beveiligde bedrijfsnetwerken.

Daarnaast is er een tweede (misschien wel belangrijkere) reden om je site te laten werken zonder javascript: SEO

[ Voor 49% gewijzigd door Bosmonster op 09-06-2009 10:24 ]


Acties:
  • 0 Henk 'm!

  • Dentist
  • Registratie: December 2000
  • Laatst online: 16-09 10:36

Dentist

Next patient please...

Topicstarter
Het lijkt erop dat ik em te pakken heb.. Weet niet precies hoe, maar hij geeft nu in ieder geval de variabele door nadat ik vanuit de debugsituatie weer from scratch ben gaan bouwen.. thanks! :)

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Bosmonster schreef op dinsdag 09 juni 2009 @ 10:20:
Heeft weinig te maken met willen, meer met kunnen. Denk aan mobiele apparatuur of beveiligde bedrijfsnetwerken.

Daarnaast is er een tweede (misschien wel belangrijkere) reden om je site te laten werken zonder javascript: SEO
Het ligt inderdaad aan je doelgroep. Daarnaast kun je natuurlijk ook andere content serveren per agent. En beveiligde bedrijfsnetwerken zonder javascript vind ik niet willen :) Say hello to the 21st century javascript is 1 van de grote talen van de toekomst.

[ Voor 14% gewijzigd door BCC op 09-06-2009 10:35 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Nexz
  • Registratie: Mei 2007
  • Laatst online: 05-09 14:48
BCC schreef op dinsdag 09 juni 2009 @ 10:34:
[...]

Het ligt inderdaad aan je doelgroep. Daarnaast kun je natuurlijk ook andere content serveren per agent. En beveiligde bedrijfsnetwerken zonder javascript vind ik niet willen :) Say hello to the 21st century javascript is 1 van de grote talen van de toekomst.
Heb je gelijk in, alleen zijn sommige systeembeheerders nogal... koppig.. IE 6 anyone? (Daar doel ik op dat er nog veelste veel bedrijven zijn die 8 jaar oude software gebruiken).

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

BCC schreef op dinsdag 09 juni 2009 @ 10:34:
[...]
Daarnaast kun je natuurlijk ook andere content serveren per agent.
Ehm.. ja en dat is natuurlijk veel minder werk dan je javascript gewoon non-obtrusive te maken met fatsoenlijke graceful degradation. Daarnaast kun je aan de agent niet zien of deze javascript-ondersteuning heeft of niet.
En beveiligde bedrijfsnetwerken zonder javascript vind ik niet willen :) Say hello to the 21st century javascript is 1 van de grote talen van de toekomst.
Dat kun je wel willen, maar verandert weinig aan de situatie ;)

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Dat zeg ik dus: het ligt aan je doelgroep en mensen zonder javascript vallen daar niet in. Daarnaast is zeker niet alles gracefully te degraden. Maar dit gaat nu wel erg offtopic.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1