# jQuery Variable übergeben?



## lisali (30. Mai 2010)

Hallo,

ich hab folgendes JQuery script:


```
<script type="text/javascript">
$(function() {
$(".delete").click(function() {
var id = $(this).attr("id");
var dataString = 'id='+ id;
var parent = $(this).parent();
	
$.ajax({
   type: "POST",
   url: "js/ajax.php",
   data: dataString,
   cache: false,

   success: function(){ parent.slideUp('slow', function() { $(this).remove();}); }
 });

return false;
	});
});
</script>
```

Und dies ist die ajax.php:


```
<?
require_once ( '../config.php' );

if ($_POST['id'])
{
$id = mysql_escape_String($_POST['id']);
if ($all){ mysql_query("UPDATE `messages` SET `uid_delete`='1',`status`='1' WHERE `id`='".$id."'"); }
else { 
list ($cr) = mysql_fetch_row(mysql_query("SELECT `sid` FROM `messages` WHERE `id`='".$id."'"));
mysql_query("UPDATE `messages` SET `uid_delete`='1',`status`='1' 
				   WHERE `uid`='".$_SESSION['id']."' AND `sid`='".$cr."'"); }
}
...
```

Erstmal wollte ich fragen, ob es möglich ist, dass er nicht nach $_POST[id] guckt bzw wo ich das ändern müsste, damit er nach was anderem guckt oder wird dann die id nicht mehr übergeben?

Und wie kann ich die Variable $all = true; übergeben?


----------



## Da_Chris (30. Mai 2010)

```
var dataString = 'id='+ id+'&test='+test;
```
jetzt wird id und test übergeben.
Das ganze funktioniert als ob du es oben in die browser adresszeile eingibst.


----------



## lisali (30. Mai 2010)

Okay und wo im HTML setze ich dann in dem Beispiel diese test-Variable?
Bei mir wird die id Variable so übergeben:


```
<a href='#' id='".$row['message_id']."' class='delete fr colorRed'>x</a>
```

Wie kann oder könnte ich das erweitern, damit er auch für "test" eine Variable annimmt?


----------



## Da_Chris (30. Mai 2010)

Kenne mich mit jquery nicht im detail aus und verstehe die Frage auch nicht ganz aber versuch es doch mal genau so nur halt mit der variable die du verwenden willst.
Ansonsten jquery dokumentation kann helfen.


----------



## lisali (30. Mai 2010)

Da wurde ich bei dem speziellen Problem auch nicht schlauer.

Die Frage war nur wie und wo ich deine beispielhafte test-Variable übergebe.


----------



## Da_Chris (30. Mai 2010)

speziell? das is mehr ein triviales problem das bestimmt irgendwo in der doku beschrieben ist  
Adaptier das ganze doch mal von id...

```
var id = $(this).attr("id");
var dataString = 'id='+ id;
```
-->

```
var test = $(this).attr("test");
var id = $(this).attr("id");
var dataString = 'id='+ id + '&test='+ test;
```
und noch einen link dazu anlegen...
Einfach ein wenig experimentieren


----------



## lisali (30. Mai 2010)

Das geht aber nicht. Er sucht ja dann nach dem Attribut "id" und "test".

Und "test" gibt es als HTML Attribut gar nicht, soviel ich weiß. Und ich muss den einen Link benutzen in meinem Fall.


----------



## Da_Chris (30. Mai 2010)

oh dann hab ich das selber nicht ganz verstanden :-(
Aber vielleicht hilft dir das ein wenig weiter: http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery


----------



## rd4eva (30. Mai 2010)

> Erstmal wollte ich fragen, ob es möglich ist, dass er nicht nach $_POST[id] guckt bzw wo ich das ändern müsste


Indem du was anderes hinschreibst 

```
if ($_POST['id'])
```
Das besagt das er im POST Array nach einem Key namens id suchen soll. Btw. wäre isset etwas schöner.



> oder wird dann die id nicht mehr übergeben?


Das eine hat mit dem anderen garnichts zu tun.
Es läuft doch vereinfacht gesagt so ab:

1. $(".delete").click(function() {
Javascript bemerkt das auf ein Element mit der Klasse delete geklickt wurde.
2. var id = $(this).attr("id");
Eine Javascript variable wird festgelegt und als Wert bekommt sie den Wert der beim angeklickten Element bei ID steht.
3. var dataString = 'id='+ id;
Eine Weitere Javascript Variable wird festgelegt die als Wert den string id= und der Wert der variable id enthält.

Diese letzte Variable wird jetzt als POST request an js/ajax.php gesendet. Ob PHP sich jetzt für die im request enthaltene id interessiert oder nicht ist JavaScript sowas von egal.



> Und wie kann ich die Variable $all = true; übergeben?
> Die Frage war nur wie und wo ich deine beispielhafte test-Variable übergebe.



Du kannst den Datastring zusammen setzen aus was auch immer due grade Lust hast.
Es muss sich in keinster Weise auf das angeklickte Element beziehen.
Du könntest beipielsweise ein Javascript Array anlegen und dort einen benötigten Wert auslesen.

Das Problem hat eigentlich aber nicht viel mit PHP zu tun.
Und für deinen Ajax aufruf gibt es eine meine Meinung nach einfachere Funktion : $.post()


----------



## Maik (30. Mai 2010)

rd4eva hat gesagt.:


> Das Problem hat eigentlich aber nicht viel mit PHP zu tun.


... d'rum wird der Thread an dieser Stelle auch entsprechend ins JS-Board umgepflanzt.

mfg Maik


----------



## lisali (12. Juni 2010)

*GET und SESSION Variablen übergeben?*

Hallo,

ich würde gern mit JQuery mit der Ajax-Funktion GET und SESSION Variablen übergeben. Ich habe auch schon gegoogelt, aber wurde dazu nicht fündig. Ich habe nur entdeckt wie man eingegebene Werte von zb. Formularen übergeben kann, aber eben keine PHP Variablen.

Kann mir jemand helfen?


----------



## Sven Mintel (12. Juni 2010)

Moin,

PHP-Variablen sind in JS nicht sichtbar, du musst sie für JS erst irgendwie zugängig machen, um damit arbeiten zu Können: http://www.tutorials.de/forum/webma...n-ich-php-variablen-javascript-verwenden.html


----------



## lisali (12. Juni 2010)

Danke, aber das geht ja nicht, wenn ich in einer JS Datei drin bin.


----------



## Sven Mintel (12. Juni 2010)

Jo, eine JS-Datei kennt aber auch keine PHP-Variablen, weil es kein PHP-Skript ist.

gebe der JS-Datei die Endung *.php, dann ist sie ein PHP-Skript und es geht.

An den Pfad zu der JS-Datei solltest du dabei einen änderlichen Teil, wie bspw. einen aktuellen Timestamp als Parameter anhängen, um sicherzustellen, dass die JS-Datei nicht aus dem Cache geladen wird.


----------



## lisali (12. Juni 2010)

Hmm... aber ich binde doch im <head> Tag immer üblicherweiße meine JS-Skripte ein. Das heißt ich include einfach per PHP eine PHP-Datei und achte darauf, dass es sich noch im Head-Tag befindet?

Es geht bei meinem "Problem" nämlich darum, dass ich eine PHP "headers already sent" Nachricht bekomme, wenn es eben schon die Ausgabe mit JS gibt.


----------



## timestamp (12. Juni 2010)

Hi



			
				lisali hat gesagt.:
			
		

> Das heißt ich include einfach per PHP eine PHP-Datei und achte darauf, dass es sich noch im Head-Tag befindet?


nicht ganz richtig. Eher so:

```
<script type="text/javascript" src="phpdatei.php"></script>
```


----------



## rd4eva (12. Juni 2010)

> Hmm... aber ich binde doch im <head> Tag immer üblicherweiße meine JS-Skripte ein



Aus Performance Gründen sollte man das eigentlich nicht tun. Javascript gehört vor das </body> - Tag.



> nicht ganz richtig. Eher so:



Mit Include gehts auch:

```
<script type="text/javascript">
<?php
include "jscript.php";
?>
</script>
```

Was logischerweise den Vorteil hat das PHP-Variablen aus der "Main.php" (die inkludierende Datei) in der jscript.php (zu inkludierende Datei) zur Verfügung stehen.


----------



## lisali (12. Juni 2010)

Wirklich? Es heißt so oft, dass das in den <head>-Tag MUSS.

Also, kann ich alles vor dem endenden body-Tag setzen?

Ist es überhaupt "legal" das so zu machen?


----------



## rd4eva (12. Juni 2010)

> Es heißt so oft, dass das in den <head>-Tag MUSS.


Das ist falsch.



> Also, kann ich alles vor dem endenden body-Tag setzen?


Im Prinzip ja solange deine Scripts es erlauben.
Du kannst beispielsweise nicht jquery ans Ende setzen wenn du irgendwo inline Jquery Code ausführen willst.
Beispiel :


```
$(document).ready(function(){ alert("ich benutze jquery"); });

<script type="text/javascript" src="...../jquery.js"></script>
```

Das würde nicht funktionieren weil die jquery Funktionen angesprochen werden bevor sie bekannt sind.



> Ist es überhaupt "legal" das so zu machen?


Jop.

Zitat Selfhtml :


> Es gibt keine festen Vorschriften dafür, an welcher Stelle einer HTML-Datei ein JavaScript-Bereich definiert werden muss. Es ist unter JavaScript-Programmierern zur Gewohnheit geworden, einen solchen Bereich im Kopf der HTML-Datei, also zwischen <head> und </head>  zu definieren.



Und das kannst du dir ja auch mal durchlesen :
http://developer.yahoo.com/performance/rules.html#js_bottom


----------



## lisali (12. Juni 2010)

Ah, okay. Vielen Dank für die Info!


----------



## Maik (12. Juni 2010)

Moin,

in diesem Zusammenhang immer wieder erwähnens-, weil empfehlenswert, die Firefox-Erweiterungen "YSlow" mit der Hilfe-Dokumentation http://developer.yahoo.com/yslow/help/, oder auch "Page Speed", diese in Verbindung mit Firebug, sowie einer dazugehörigen Dokumentation Using Page Speed, die sich ebenfalls mit der Thematik "Performance Best Practices" näher beschäftigt.

mfg Maik


----------

