Wie funktioniert Ajax in Smarty Templates?

Kalma

Erfahrenes Mitglied
Hi,

ich versuche schon seit geraumer Zeit in meine Seite mit Smarty Templates Ajax einzubauen.

Das gelingt mir aber nicht.
Zum Beispiel habe ich dieses hier versucht:
http://tutorialzine.com/2009/08/creating-a-facebook-like-registration-form-with-jquery/

Aber ich weiß nicht wie ich zum Beispiel diesen Teil:
PHP:
// we check if everything is filled in

if(empty($_POST['fname']) || empty($_POST['lname']) || empty($_POST['email']) || empty($_POST['pass']))
{
	die('{status:0,txt:"All the fields are required"}');
}

// is the sex selected?

if(!(int)$_POST['sex-select'])
{
	die('{status:0,txt:"You have to select your sex"}');
}

// is the birthday selected?

if(!(int)$_POST['day'] || !(int)$_POST['month'] || !(int)$_POST['year'])
{
	die('{status:0,txt:"You have to fill in your birthday"}');
}

// is the email valid?

if(!(preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['email'])))
	die('{status:0,txt:"You haven\'t provided a valid email"}');

echo '{status:1,txt:"registered.html"}';

Richtig umsetze damit es im Template ausgegeben wird.
mit echo kann dies ja wohl kaum funktionieren.


Wäre super, wenn ihr mir Tipps geben könntet, oder mir Tutorials nennen könntet, da ich keine gefunden hab.
Danke!
David
 
Genau, Meldungen anzeigen ohne Seite neu laden ist zum Beispiel eine Funktion.
Oder Daten ändern.


Mein Problem ist, dass ich Smarty Templates benutze.
Und ich weiß nicht, wie ich das jetzt einbauen muss, da man im PHP Teil ja jetzt nicht einfach mehr "echo" machen kann.
Ich muss die Nachrichten filtern und dann ins Template übergeben, aber wie?!
 
Nun, auf jeden Fall muss man einen Rquest per JavaScript absetzen und dessen Rückgabewert verarbeiten. Das kann man auf zwei Wege.

1. Man gibt die Antwort des Server einfach aus, da es sich um HTML handelt.
Dafür sollte sich .load() gut eignen.

2. Man verarbeitet die Antwort des Servers, da sie z.b. im JSON- oder XML-Format geliefert werden. (Was bei dir ja zutrifft.)
Dafür gibt es .ajax().

So wie dein Response derzeit aussieht, musst du die Serverantwort lediglich einer Variable zuweisen und kannst mit dieser dann wie mit einem normalen Objekt arbeiten. Z.b. in der success-Methode von .ajax().
Schaus dir einfach mal an. ;)

*edit*
Was das ganze mit Smarty zu tun hat verstehe ich nicht. :confused:
 
Aah, ich habs hinbekommen... :-(

Habe jetzt folgendes Ajax/Javascript Script:
Code:
$(document).ready(function(){
					$('#regForm').submit(function(e) {
						register();
						e.preventDefault();
					});
				});
				
				function register()
				{				
					$.ajax({
						type: "POST",
						url: "register.php",
						data: $('#regForm').serialize(),
						dataType: "json",
						success: function(msg) {
							// get error-status-number
							errorstatus	=  parseInt(msg.status);
							
							if(errorstatus == 1) {
								window.location=msg.txt;
							} else if(errorstatus == 0) {
								error(1,msg.txt);
							} 
						}
					});
				}


				function hideshow(el,act)
				{
					if(act) 
						$('.'+el).animate({ height: 'show', opacity: 'show' }, 'fast');
					else 
						$('.'+el).animate({ height: 'hide', opacity: 'hide' }, 'fast');
				}
				
				function error(act,txt)
				{
					hideshow('error',act);
					
					if(txt) 
						$('.error').html(txt);
				}

Gibt es eine Möglichkeit, diese Funktionen möglichst so zu gestalten, dass ich sie auf (wenn möglich) allen Seiten, auf denen per Ajax etwas gesendet werden soll, verwenden kann?


Gruß
David
 
Zurück