• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z ajaxem

0 głosów
94 wizyt
pytanie zadane 17 lipca w JavaScript, jQuery, AJAX przez `Krzychuu Gaduła (4,830 p.)

Witam

Mam problem z ajaxem gdy dodam opcję dataType: 'json', to wtedy kod przestaje działać i wyświetla się funkcja error, próbowałem to jakoś naprawić ale nie mam już pomysłów, jakby ktoś pytał to robię to na xampp ,tutaj mój kod:

 

      $.ajax({
            type: 'POST',
            url: 'sendmail.php',
	    dataType: 'json',
            data: {
                firstlastname: FirstName,
                email: Email,
                phonenumber: PhoneNumber,
                message: Message
            },
	   success: function (data) {				
		$('#sendmailRESULT').html('Twoja wiadomość została wysłana, postaramy sie odpowiedzić w ciągu 24!');
		$('#sendmailRESULT').addClass('SendMailTRUE');
            },
            error: function () {
                $('#sendmailRESULT').html('Przepraszamy ale nie udało się wysłać twojej wiadomości mamy chwilowe problemy z serwerem, zapraszamy ponownie później!');	
                $('#sendmailRESULT').addClass('SendMailFALSE');	
            }
        });

 

<?php

header("Content-type: application/json");

if (!empty($_POST['firstlastname'] && $_POST['email'] && $_POST['phonenumber'] && $_POST['message'])) {
	

	$FirstLastName = $_POST['firstlastname'];
	$Email = $_POST['email'];
	$PhoneNumber = $_POST['phonenumber'];
	$MessagePOST = $_POST['message'];
	
	
	$To= 'abc@wp.pl';
	$Title = 'Title';
	$Message = '';
	$Message .= 'Imię I Nazwisko: '.$FirstLastName.'\n';
	$Message .= 'Email: '.$Email.' Numer Telefonu: '.$PhoneNumber.'\n';
	$Message .= 'Wiadomość:'.$MessagePOST.'\n';
	$Headers = 'From: a@wp.pl'.'\r\n';
		
	
	$SendMail = mail($To, $Title, $Message, $Headers);
	
	
 
	$data = array();	
	
	if ($SendMail) {
		
		$data['SendMailTRUE'] = 'true';
		echo json_encode($data);		
		
	} else {
		
		$data['SendMailFALSE'] = 'false';
		echo json_encode($data);
		
	}
	
} else {

	header('Location: index.php');
	
}

?>

 

2 odpowiedzi

+1 głos
odpowiedź 17 lipca przez Tomek Sochacki Pasjonat (15,060 p.)
wybrane 18 lipca przez `Krzychuu
 
Najlepsza

Spróbuj tak:

w JavaScript:

const data = {
    firstlastname: FirstName,
    email: Email,
    phonenumber: PhoneNumber,
    message: Message
}

//i potem:
$.ajax({
    method: 'POST',
    url: 'sendmail.php',
    dataType: 'json',
    contentType: "application/json;charset=utf-8",
    data: `ajaxData=${JSON.stringify(data)}` },
//i dalej callback success itp.

i później w PHP:

  if(isset($_POST['ajaxData'])) {
    $json = json_decode($_POST['ajaxData'], true);
  } else {
    echo "Nie otrzymano danych!";
  }

//i potem wszystko masz w tablicy nie POST ale $json:
$json['firstlastname']; 
$json['email']; //itd.

 

A i jeszcze jedno... gdzie walidacja danych :) (i to wg mnie zarówno w JS jak i w PHP)

komentarz 17 lipca przez `Krzychuu Gaduła (4,830 p.)
bardzo dziękuje za pomoc i poświęcony czas :)
komentarz 17 lipca przez Tomek Sochacki Pasjonat (15,060 p.)
spoko :) najważniejsze, że udało się uruchomić aplikację.

A tak na marginesie, jeśli chcesz się uczyć "webu" to proponuję teraz ten kod z jQuery przepisać np. na użycie "czystego" XMLHttpRequest i Promise :) Masz punkt bazowy, który działa i wiesz już jak analizować ruch server-client więc czas poznać Ajax "od środka" :)

Powodzenia w nauce!

Pozdrawiam
komentarz 17 lipca przez `Krzychuu Gaduła (4,830 p.)
Dziękuje za podpowiedz, tak właśnie zrobię, dziękuje i również pozdrawiam :)
komentarz 18 lipca przez `Krzychuu Gaduła (4,830 p.)

rozwiązałem problem z dataType, gdy wczoraj cały dzień walczyłem z tym dziś dostałem olśnienia :D, dodałem w anonimowej funkcji error i wyświetliłem za pomocą console.log(error)

            error: function (error) {
				
				console.log(error);
								
            }

co się okazało w obiekcie był błąd generowany przez php, między innymi chodziło  o niedziałającą funkcje mail (na xampp) przez co wyskakiwał błąd po usunięciu linii mail (w celu testu) okazało się że funkcja dataType działa prawidło i przesyła dane do funkcji success. Jeszcze raz dziękuje Tomasz Sochacki za wczorajszą pomoc i poświęcony czas :)

1
komentarz 18 lipca przez Tomek Sochacki Pasjonat (15,060 p.)
to dobrze, że udało się rozwiązać problem i co ważniejsze, znaleźć przyczynę :)

Tak na marginesie to kolejna nauczka, że tworząc aplikację od samego początku należy myśleć o ewentualnych błędach, testach itp. Nie bez powodu w node błąd jest przekazywany jako pierwszy argument w funkcjach zwrotnych w myśl zasady najpierw error, potem success :)

A przy okazji przynajmniej wreszcie coś nie coś poduczyłem się jQuery :) Nie korzystam z tej biblioteki ale to nie oznacza, że nie warto jej znać :)

Pozdrawiam
+1 głos
odpowiedź 17 lipca przez kosaa Dyskutant (8,530 p.)
w konsoli JS masz jakieś bledy?

po dwa, w logach php co Ci wyswietla?

po trzy, strzelam, ze ten header w php jest zbędny
header("Content-type: application/json");
komentarz 17 lipca przez `Krzychuu Gaduła (4,830 p.)
w konsoli 0 błędów, jedyny błąd który pokazuje php to że nie może odpalić funkcji mail(), ponieważ robię to na localhost
komentarz 17 lipca przez kosaa Dyskutant (8,530 p.)
ale jest to error czy warning? jak error to wywala Ci się cały skrypt pewnie z kodem 500, daletego po stronie JS masz przekierowanie na Ajax::error
komentarz 17 lipca przez `Krzychuu Gaduła (4,830 p.)
Warning
komentarz 17 lipca przez Tomek Sochacki Pasjonat (15,060 p.)
Komunikację Ajax można łatwo weryfikować po wejściu w narzędzia deweloperskie Chrome (F12) -> zakładka Network i masz całą historię żądań i odpowiedzi http, tylko musisz odświeżyć stronę i ponownie wysłać request ajax żeby pokazało wszystko. Będziesz miał tam widoczny ciąg wysyłany jako żądanie oraz odpowiedź serwera.

Podobne pytania

0 głosów
1 odpowiedź 78 wizyt
pytanie zadane 28 grudnia 2016 w JavaScript, jQuery, AJAX przez Boshi Szeryf (97,180 p.)
+1 głos
1 odpowiedź 49 wizyt
pytanie zadane 3 lutego w JavaScript, jQuery, AJAX przez MaciekM Użytkownik (970 p.)
0 głosów
1 odpowiedź 97 wizyt
pytanie zadane 17 czerwca 2016 w JavaScript, jQuery, AJAX przez pietrek98 Początkujący (430 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,676 zapytań

76,595 odpowiedzi

149,654 komentarzy

18,085 pasjonatów

Przeglądających: 189
Pasjonatów: 6 Gości: 183

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...