PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit AJAX per jQuery


ravage
2011-01-26, 23:22:03
Moin.

Folgendes Konstrukt aufs wesentliche reduziert:

Ich habe eine Seite mit einem Link und einem leeren Div Container. Nach erfolgreichem Laden dieser Seite werden zwei jQuery AJAX Scripts geladen.

Script Nr. 1 überwacht den Link und lädt bei einem Klick ein Formular aus einer PHP Datei in den vorher noch leeren Div Container.

Script Nr. 2 soll beim abschicken des Formulares ausgeführt werden und die Daten im Formular per PHP Datei in MySQL eintragen. Soll... macht es aber nicht. Wenn ich das jQuery Script per onClick aufrufe funktioniert es.

Meine Vermutung ist (hab nur wenig Erfahrung damit wie Javascript arbeitet):

Da beim laden der Seite und damit der jQuery Scripts das Formular noch gar nicht vorhanden ist, kann dies auch nicht überwacht werden. Ist das wirklich so? Und wenn ja, wie löse ich das Problem ohne Hilfsmittel wie onClick etc.?

/EDIT meint, ich soll ein Beispiel posten.

index.html

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script type="text/javascript">
<!--
$(function(){
$('a').click( function() { // Link wird überwacht
$.ajax({
type: "GET",
url: "back.php",
data: "task=Form",
success: function(data) {
$('div').html(data);
$('textarea').focus();
}
});
return false;
});

$('form').submit( function() { // Form wird überwacht
alert("Script wird ausgeführt!");
$.ajax({
type: "GET",
url: "back.php",
data: "task=SQL",
success: function(data) {
$('div').html(data);
}
});
return false;
});
});

function sqlStart() { // Funktion wird direkt aufgerufen
alert("Script wird ausgeführt!");
$.ajax({
type: "GET",
url: "back.php",
data: "task=SQL",
success: function(data) {
$('div').html(data);
}
});
return false;
}
//-->
</script>
</head>
<body>
<p><a href=“#“>Link</a></p>
<div></div>
</body>
</html>

back.php

<?php
if( $_POST['task'] ) $task = $_POST['task'];
else $task = $_GET['task'];

switch( $task ) {
case "Form" : # Kommentar Formular
$return = "<form>";
$return .= "<textarea></textarea>";
$return .= "<input type=\"submit\" value=\"ohne onClick\">";
$return .= "<input type=\"button\" onClick=\"sqlStart()\" value=\"mit onClick\">";
$return .= "</form>";
echo $return;
break;
case "SQL" : # Kommentar in Datenbank schreiben
echo "<p>SQL Befehl bla bla bla</p>";
break;
case "else" :
break;
}
?>

ezzemm
2011-01-27, 07:20:21
Ich könnte mir vorstellen daß dir die live()-Methode weiterhilft:
http://api.jquery.com/live/

$('form').live('submit', function() {
// Live handler called.
});

ravage
2011-01-27, 10:43:48
Besten Dank ezzemm, funktioniert Super! :up:

AlecWhite
2011-01-27, 10:54:11
Ich bevorzuge in deinem Fall dann eher die .ready methode

http://api.jquery.com/ready/

ravage
2011-01-27, 13:33:21
.ready() habe ich schon drin, ich hab nur die kurze Methode genutzt:

http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx#tip25

Und das hilft mir in dem Fall auch nicht weiter, da das Formular noch gar nicht vorhanden ist in dem Moment wo die .ready() Funktion geladen wird.