# [jQuery] Mit Ajax Variable übergeben



## newwarrior (20. März 2010)

Hallo,

ich habe ein kleines Messagecenter.
Dort können User Nachrichten makieren.
Dazu müssen Sie einfach nur auf eine Flage klicken, und dann soll die Mail ID mit JS & AJAX & jQuery übergeben werden, und dann in einem PHP Script, der Eintrag in der DB geändert werden.
Wenn das erfolgreich geschehen ist, dann soll der Div neugeladen werden.
Das letzte ist kein Problem, auch eine Variable an eine JS Funktion zu übergeben, doch, wie kann ich jetzt mit AJAX & jQuery, die Variable weiter an das PHP Script leiten ohne das die Seite neu geladen wird?

Danke


----------



## Parantatatam (20. März 2010)

jQuery hat doch so eine schöne Dokumentation, dass man schon beim Überfliegen der Seite das hier gefunden hätte:

```
$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });
```
Dabei sind folgendes die übergebenen Variablen:

```
/* Variablenname: Wert [, ...] */
{ name: "John", time: "2pm" }
```
Und in *data* sind die von dem PHP-Skript ausgegeben Daten drin.

Nachzulesen hier: jQuery.post()


----------



## newwarrior (20. März 2010)

Also ich habe mal folgendes versucht:


```
<script>
			  function flag_mail()
			  {
				$.get("../../scripts/server.php", { flag_mail: "true", mail_id: "'.$mails_data->mail_id.'"});
			  }	
			</script>
<img src="http://www.tutorials.de/img/mainpage/flag_off.png" alt="flag" onclick="flag_mail();"/>&nbsp;
```

Die Server.php sieht dann so aus:


```
if(isset($_GET['flag_mail']) AND $_GET['flag_mail'] == true)
{


	$sql_mail = 'UPDATE user_mail SET mail_flaged = "1" WHERE mail_id "'.$_GET['mail_id'].'"';
	mysql_query($sql_mail) OR die(mysql_error());
}
```

Aber es passiert rein gar nichts


----------



## Parantatatam (20. März 2010)

Der kann dir doch auch nichts ausgeben, wenn du a) nicht den veränderten Text lädst und b) diesen dann nicht ausgibst (beispielsweise mit *echo* oder *print*).


----------



## newwarrior (20. März 2010)

Er ändert nichts in der DB, ich habe danach die DB geschaut und auch einen refresh der Seite gemacht.


----------



## Parantatatam (20. März 2010)

Schau doch erstmal, ob die Aktualisierung durchgeführt wird, wenn du das Skript direkt aufrufst, also so in etwa: 
*server.php?flag_mail=true&mail_id=x* (x muss durch die entsprechende ID ersetzt werden)

Außerdem funktioniert das hier auch nicht:

```
<script>
function flag_mail(){
    $.get("../../scripts/server.php", { flag_mail: "true", mail_id: "'.$mails_data->mail_id.'"});
}
</script>
<img src="http://www.tutorials.de/img/mainpage/flag_off.png" alt="flag" onclick="flag_mail();"/>
```
Ansonsten gibt es auch noch einen Unterschied zwischen *"true"* und *true*, denn das erste ist eine Zeichenkette, dass zweite ein boolscher Wert.


----------



## newwarrior (20. März 2010)

Was du oben ansprichts, wegen:

*'.$mails_data->mail_id.'*

das wird durch php eingetragen, das ganze Script steht eigentlich in einer PHP Schleife.
Ich habe alles versucht, ich habe das mit true angepasst und auch direkt den Link angepasst, hat nichts gebracht.
Dann habe ich ihn ohne JS ausgefürht, also oben direkt in die Zeile eingeben, da hat er die DB Werte geändert.
Nur wenn ich es so machen will:


```
<script>
			  function flag_mail()
			  {
				$.get("tpl/scripts/server.php?flag_mail=true&mail_id=7", { flag_mail: "true", mail_id: "'.$mails_data->mail_id.'"});
			  }	
			</script>
```

passiert rein gar nichts


----------



## Parantatatam (20. März 2010)

Falls das Verzeichnis tpl im Wurzelverzeichnis liegt, dann solltest du davor noch einen Schrägstrich einfügen, so dass das Ganze so aussieht:

```
<script>
function flag_mail() {
    $.get("/tpl/scripts/server.php?flag_mail=true&mail_id=7", { flag_mail: "true", mail_id: "'.$mails_data->mail_id.'"});
}
</script>
```

PS: Warum hängst du eigentlich die Parameter an die Datei an, wenn du sie außerdem noch als Parameter in der Funktion übergibst?


----------



## newwarrior (20. März 2010)

Problem gelöst.
Ich habe den JS Teil in den Headbereich gepackt, dann habe ich die Funktion ein wenig verändert:


```
function flag_mail(mail_id) {
	$.get("tpl/scripts/server.php", { flag_mail: "true", mail_id: +mail_id});
}
```

Und nun klappt es.
Danke für deine Hilfe.

Keine Ahnung warum ich es mir so schwer gemacht habe.

Gruß

NW


----------

