Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazanie dodatkowych zmiennych obok $_POST
Forum PHP.pl > Forum > XML, AJAX
gucio1
Witam,
mam taki kod:

  1. $('#form1').on('submit', 'form.addProductToCart', function (event) {
  2. event.preventDefault();
  3.  
  4. $.ajax({
  5. url: 'cart.php',
  6. method: 'POST',
  7. data: $(this).serialize()
  8. })
  9. .done(function (data, textStatus, jqXHR) {
  10.  
  11. });
  12. });


Do pliku cart.php przekazuje wysłane zmienne z formularza.
Zamiast zmiennych z formularza chciałbym przekazać tam już w kodzie JS 2 zmienne np. zmienna1 i zmienna2.
Czyli coś takiego:

  1. $('#form1').on('submit', 'form.addProductToCart', function (event) {
  2. event.preventDefault();
  3.  
  4. $.ajax({
  5. url: 'cart.php',
  6. method: 'POST',
  7. zmienna1 = "wartosc"
  8. zmienna2 = "123"
  9. })
  10. .done(function (data, textStatus, jqXHR) {
  11.  
  12. });
  13. });


I chciałbym to odbierać fomularzem albo GET'em albo czymkolwiek innym. Jak tego dokonać?
Pyton_000
Jeśli getem to dodaj po prostu do URL te zmienne
gucio1
w sumie nie wpadłem na to.
A jeśli nie Getem?
markuz
Kod
var data = $(this).serialize();
data['a'] = 5;
data['b'] = 10;

        $.ajax({
            url: 'cart.php',
            method: 'POST',
            data: data
        })
gucio1
I potem odbieram to w pliku jak $_POSTEM czy jak?
Pyton_000
albo

Kod
var data = {
    'a': 5,
    'b': 10,
};
$.ajax({
    url: 'cart.php',
    method: 'POST',
    data: $(this).serialize().concat(data)
})
gucio1
Dzięki, tylko własnie jak to potem odbieram? smile.gif
Pyton_000
skoro nie GETem to POSTem
gucio1
Kurcze nie wiem smile.gif
mam odbierać $_POST['a'] i $_POST['b'] questionmark.gif

bo coś nie idzie tak
nospor
No to moze pokaz jak odbierasz, gdzie odbierasz i co potem z tym robisz...
Pyton_000
I jaki problem sobie zrobić var_dump($_POST) i zobaczyć co tam masz?
gucio1
  1.  
  2. header("Content-Type: application/json;charset=utf-8");
  3.  
  4. echo json_encode([
  5. 'cart' => $_POST['a'],
  6.  
  7. ]);
  8.  
nospor
No i sprawdzales co to zwraca?
A najlepiej zrob var_dump calego POST jak napisal Pyton
gucio1
W sumie źle trochę się wyraziłem bo w tym przypadku nie chcę nic wysyłać $_POSTem tylko po prostu przekazać do ajaxa 2 zmienne bez wysyłania formularza.
Tak jakby uruchomić ajaxa clickiem a nie sumbitem.
I wtedy jak tu odebrać te dane tongue.gif
Pyton_000
tak samo?
gucio1
Pomyślałem że nie da się wywołać tego var_dump($_POST) kiedy nie wysyła się formularza smile.gif
To serio nie wiem jak wywołać ten var_dump. Kombinowałem na kilka sposobów i dajcie proszę jakąś podpowiedź
nospor
Cytat
Tak jakby uruchomić ajaxa clickiem a nie sumbitem.

No to odpal tego ajaxa clickiem a nie submitem. No jaki problem?
gucio1
Problem leży w tym że nie mogę odebrać tych danych $_POSTem.
W tym naszym przykładzie zmienne nazywają się "a" i "b" próbuje w sposób $_POST['a'] i nie wiem czy powininem do tego dodać jakiś przedrostek lub odczytać to w specyficzny sposób. A na przy formularzu wysyłanym przez AJAX nie mogę wywołać tego var_dump.
nospor
Cytat
A na przy formularzu wysyłanym przez AJAX nie mogę wywołać tego var_dump.
A kto ci broni?
gucio1
No nikt ale kiedy próbuje go wywołać nie mam żadnego zwrotu
nospor
Uzywasz narzedzi developerskich w przegladarce? Masz tam wszystkie AJAX jakie ida oraz co zwracaja
gucio1
Spoko sprawdziłem na dobrym kodzie z AJAXem, faktycznie widać jakie dane idą i jakie się zwracają.
W przypadku użycia kodu:
  1. var data = $(this).serialize();
  2. data['a'] = 5;
  3. data['b'] = 10;
  4.  
  5. $.ajax({
  6. url: 'cart.php',
  7. method: 'POST',
  8. data: data
  9. })


żadne dane nie idą. Może nie dodałem czegoś przed tymi instrukcjami albo po? Może brakuje gdzieś przecinka? średnika??
Nie mam już pomysłów.

Jeszcze sprawdziłem ten przykład:
  1. var data = {
  2. 'a': 5,
  3. 'b': 10,
  4. };
  5. $.ajax({
  6. url: 'cart.php',
  7. method: 'POST',
  8. data: $(this).serialize().concat(data)
  9. })


W tym przypadku idzie: [object Object]:
Podejrzewam że gdzieś jest mały błąd.
aras785
Przykład 2:

  1. var data = {
  2. 'a': 5,
  3. 'b': 10,
  4. };
  5. $.ajax({
  6. url: 'cart.php',
  7. method: 'POST',
  8. data: data
  9. })


Przykład 1:

  1. $('#form1').on('submit', function(event) {
  2. event.preventDefault();
  3. var data = $(this).serializeArray();
  4. data.push({name: "a", value: 5});
  5. data.push({name: "b", value: 10});
  6. console.log(data);
  7. $.ajax({
  8. url: 'cart.php',
  9. method: 'POST',
  10. data: data
  11. })
  12.  
  13. });


https://jsfiddle.net/vwqvb983/
gucio1
Wystarczyło zmienić w drugim przykładzie to:
data: $(this).serialize().concat(data)

na:

data:data

I wszystko pięknie śmiga. Nie wiem czego z tym "concat" nie działało. Ale ok wielkie dzięki tak myślałem że to głupi błąd wink.gif
LowiczakPL
Cytat(gucio1 @ 14.04.2018, 11:14:18 ) *
... Nie wiem czego z tym "concat" nie działało....


concat dodaje element lub tablicę do tablicy a nie stringa, a serialize zwraca stringa, dlatego nie zadziałało
nospor
@Lowiczak co bys sie nie zdziwil....
https://developer.mozilla.org/en-US/docs/We...s/String/concat

A nie dzialalo bo do zserializowanego tekstu nie mozesz od tak sobie dodac innego tekstu i nie naruszyc struktury porpzedniego
LowiczakPL
ale data nie jest u niego stringiem, jego zwrotka to było [object Object]
nospor
Cytat
concat dodaje element lub tablicę do tablicy a nie stringa
Jak juz napisalem, concat dziala tez na stringach.

zas u niego data w pewnym momencie bylo tez stringiem. Wystarczy przejrzec jego poprzednie kody. Tak czy siak mial sieczke

edit: choc w sumie w przykladzie do ktorego sie odwolywal faktycznie mial object smile.gif Hehe, wyszlo w sumie na twoje smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.