[jQuery] array.push({}) werkt niet zoals het moet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Albert de Wit

Albert de Wit

04/04/2013 10:33:44
Quote Anchor link
Hallo,

Ik heb een formulier dat ik met een ajax call wil versturen. Dat doe ik met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$(document).on('submit','.lightbox-form',function(){
    var post_vars = $('.lightbox-form').serializeArray();
});


Ik wil alleen daarna nog een waarde toevoegen aan die array.
Dat doe ik met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
var soort = $(this).attr('name'); // in dit geval is dat 'wijzigen'
post_vars.push({soort: soort});


Als ik dan dit met een ajax call verstuur en de output van het php bestand in de console zet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
print_r($_REQUEST);
?>


krijg ik alle waarden van de input velden maar nergens een teken van $_POST['soort'] of iets dergelijks. Wel een 'undefined'.

Weet iemand wat ik verkeerd doe of hoe ik het beter kan doen?
 
PHP hulp

PHP hulp

26/11/2024 05:21:51
 
Erwin H

Erwin H

04/04/2013 10:39:43
Quote Anchor link
Wat je nu doet is volgens mij een literal object meegeven als een array element. Zou het dus werken dan krijg je dit volgens mij (waarbij de waardes dus de waardes uit de serialize zijn):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
post_vars = [waarde, waarde, {soort: soort}];

Maar ik denk dat post_vars helemaal geen array is, want in dat geval zou je de keys niet goed door krijgen in php. Volgens mij is post_vars dus al een literal object en in dat geval zou je gewoon dit moeten kunnen doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
post_vars.soort = soort;
Gewijzigd op 04/04/2013 10:40:13 door Erwin H
 
Albert de Wit

Albert de Wit

04/04/2013 10:44:36
Quote Anchor link
Erwin, ik stuur ze mee aan een ajax call
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var url = $('.lightbox-form').attr('action');
$.post(url,post_vars).done(function(data){
    console.log(data);
});


Toevoeging:

Ik zal even jouw voorbeeld gebruiken, bedankt!

Toevoeging op 04/04/2013 10:48:28:

Ik heb jouw voorbeeld nu gebruikt. Het undefined gedeelte is weg, maar het $_POST['soort'] is er niet bij gekomen.
Gewijzigd op 04/04/2013 10:45:32 door Albert de Wit
 
Erwin H

Erwin H

04/04/2013 10:57:01
Quote Anchor link
Dan maar even de JQuery documentatie erbij (http://api.jquery.com/serializeArray/):
Quote:
This produces the following data structure (provided that the browser supports console.log):
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
[
  {
    name: "a",
    value: "1"
  },
  {
    name: "b",
    value: "2"
  },
  {
    name: "c",
    value: "3"
  },
  {
    name: "d",
    value: "4"
  },
  {
    name: "e",
    value: "5"
  }
]

Met andere woorden, je eerste opzet was bijna goed. Je moet dus wel een object literal als element meegeven, maar met specifieke name en value properties. Dit zou denk ik dan wel werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
post_vars.push({name: 'soort', value: soort});
Gewijzigd op 04/04/2013 10:57:38 door Erwin H
 
Albert de Wit

Albert de Wit

04/04/2013 11:00:18
Quote Anchor link
Wat ik tot nu toe heb geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
post_vars[post_vars.length] = { soort: soort}; // undefined is dan weer terug
post_vars['soort'] = soort; // undefined is dan weer weg maar er is geen $_POST['soort'] aanwezig
post_vars.push({soort: soort}); // undefined is dan weer terug.
post_vars.soort = soort; // undefined is dan weer weg en de $_POST['soort'] is er dan niet


Toevoeging op 04/04/2013 11:02:14:

Hey, top! Hij werkt helemaal! Zag dat over het hoofd want ik dacht even dat het alleen maar 2 $_POST variabelen erbij zou zetten van $_POST['name'] en $_POST['value']. Hartstikke bedankt!
 



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.