[jQuery] wysyłanie formularza przez ajax

0

Witam,
Mój problem jest pewnie banalny dla wielu webmasterów z tego forum dlatego liczę na pewną odpowiedź :)
Mam taki oto kod:

function send_mail()
{


		$(".error").hide();
		var hasError = false;
		var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
		var emailToVal = "[email protected]";

		
		
		var emailTopic = $("#form_topic").val();
		if(emailTopic == '') {
			$("#form_topic").before('<div class="error">Podaj temat.</div>');
			hasError = true;
		}

	
		
		var emailFromVal = $("#form_mail").val();
		if(emailFromVal == '') {
			$("#form_mail").before('<div class="error">Podaj maila.</div>');
			hasError = true;
		} else if(!emailReg.test(emailFromVal)) {
			$("#form_mail").before('<div class="error">Blad w mailu.</div>');
			hasError = true;
		}
		
	
		
		var messageVal = $("#form_content").val();
		if(messageVal == '') {
			$("#form_content").before('<div class="error">Podaj wiadomosc.</div>');
			hasError = true;
		}
		
	
		
		if(hasError == false) {

			$.ajax({
			
			  type: "POST",
			  url: "../kontakt/senmail.php",
			  data: "name=John&location=Boston",
			  success: function(msg){
			    alert( "Data Saved: " + msg);
				}
			});
		}

		
		
		return false;

}

sendmail.php:

<?php
	echo $_POST['name'];
	print_r($_POST);
?>

System sprawdza czy dane w formularzu są poprawne (działa ok) a jezeli nie ma błędu to powinien wysyłać ajaxem i dawać odpowiedź - to tylko test przed prawdziwym wywołaniem więc proszę nie szukać logiki tu ;)
Ale funkcja ajax nie działa nie wiem czemu. A skrypt żywcem prawie sciągnięty z http://docs.jquery.com/Ajax/jQuery.ajax

Jakieś sugestie? Co mam źle?
Wszelkie informacje podam w tempie natychmiastowym jeżeli będzie taka potrzeba :)
pozdrawiam i z góry dziękuję za odpowiedź

0

Firebug -> zakładka console i patrzysz czy w ogóle jest wykonywane zapytanie do serwera. Jeśli jest, zobaczysz dokładny adres/wysłane dane/odebrane dane. Sprawdź czy są poprawne.

0

Na moje oko to to wygląda jak deklaracja zmiennej, a nie wywołanie funkcji. Dodam że "oni" robią to tak: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

0

Spróbuj może też w url'u podać całą ścieżkę, bezwzględną.

0

Debugowałem tak jak radziliście przez konsolę Firebuga i doszedłem do wniosku że nie umiał "złapać" funkcji implementowanej z zewnątrz.. mniejsza z tym ważne że dane są przesyłane już prawidłowo ale na serwerze nadal POST jest pusty obojętnie jak bym tego nie wysyłał.
Oto kod znów wysyłający posta:

$.ajax({
			
		type: "POST",
		url: "../kontakt/sendmail.php",
		data: "emailFrom: logan",
		success: function(data){
		  alert( "Data Saved: " + data );
		}
});

Konsola pokazuje że te dane są prawidłowo przesłane (http://img120.imageshack.us/img120/9803/postiy4.jpg) ale po przesłaniu i zadziałaniu kodu w 'kontakt/sendmail.php':

<?php
     $mailFrom = $_POST['emailFrom'];	
     echo 'email from: '.$mailFrom;
?>

nic nie jest wyświetlane, tzn cały POST jest PUSTY :(
nie wiem co jest nie tak ..

0

url: "../kontakt/sendmail.php",

wstaw tam adres internetowy a nie ścieżkę do pliku

0
madmike napisał(a)

url: "../kontakt/sendmail.php",

wstaw tam adres internetowy a nie ścieżkę do pliku

To nie jest problemem gdyż on normalnie interpretuje tą ścieżkę i dochodzi do pliku, bo inaczej nic by nie wyświetlał a jednak obsługuje kod z 'sendmail.php' ale dlaczego POST nie jest prawidłowo przesyłany?

0

A nie możesz tego po prostu zrobić na GET?
Na przykład tą prostą biblioteką:

// Get the HTTP Object
function getHTTPObject(){
   if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}   

// Change the value of the outputText field
function setOutput(){
   if(httpObject.readyState == 4){
      document.getElementById('myBody').innerHTML = httpObject.responseText;
	busyStatus = false;
   }
}

// Implement business logic
function loadSite(namesite){
   httpObject = getHTTPObject();
   if (httpObject != null) {
      httpObject.open("GET", namesite, true);
      httpObject.send(null);
      httpObject.onreadystatechange = setOutput;
   }
}
 
var httpObject = null;

Walimy tak:

loadSite('../kontakt/sendmail.php?mailfrom='+document.getElementById('mailfrom').value+'&costam=1');

I odpowiedź ładuje się nam w elemencie [divie, spanie] który ma ID myBody.
Pobiera dane z inputa o ID mailfrom.

1 użytkowników online, w tym zalogowanych: 0, gości: 1