Zurück   Flashforum > Alternative Technologien > JavaScript & jQuery

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-12-2011, 22:06   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 10
Werte-Ausgabe mittels JavaScript/AJAX funktioniert im IE9 nicht

Hallo liebe Forums-Kollegen,
ich Melde mich wieder mit einem Problem, welches ich alleine nicht zu lösen vermag.

Ich beschreibe ganz kurz was ich will: ich lese die id einer html-Zelle aus, sende diese mittels JavaScript/ajax an eine php-Datei wo eine MySQL-Abfrage ausgeführt wird. Das Ergebnis wird wieder an die ursprüngliche html-Seite zurückgesendet und in eine andere html-Zelle geschrieben.
So weit so gut.

Ich habe in Netz auch ein JavaScript gefunden, welches genau diesen Anspruch gerecht wird. Hier zu finden: Ajax Beispiel 004.

Jetzt mein eigentliches Problem...
Ich habe dieses Script leicht an meine Bedürfnisse angepasst, und es funktioniert auch - nur nicht im IE9! Habs mit Opera, Firefox und Chrome probiert. Überall werden die Werte in die Zellen ausgegeben; nur bei IE9 wird nix ausgegeben.
Vielleicht muss bei "Request erzeugen" noch eine Browser-Weiche gemacht, werden. Aber da ich mich erst seit wenigen Tagen mit JavaScript beschäfte, tu ich mir relativ schwer hier eine Lösung zu finden.

Ich hoffe einer von euch kann mit weiter helfen.
Bei bedarf kann ich den html-Auszug, die php-Datei und das JavaScript posten.
Danke.

MfG
spastman1
spastman1 ist offline   Mit Zitat antworten
Alt 22-12-2011, 23:17   #2 (permalink)
Web-Developer
 
Benutzerbild von Zeimn
 
Registriert seit: May 2003
Ort: Essen
Beiträge: 84
Poste doch mal deinen Code, damit man sieht was du da versuchst. Was heißt HTML-Zelle, ein DIV Container? Ohne Code ist es schwer zu verstehen) Ansonsten helfe ich dir gern.
__________________
www.simon-koehler.com
Zeimn ist offline   Mit Zitat antworten
Alt 22-12-2011, 23:33   #3 (permalink)
Web-Developer
 
Benutzerbild von Zeimn
 
Registriert seit: May 2003
Ort: Essen
Beiträge: 84
Warum verwendest du eigentlich nicht jQuery dazu? Kennst du jQuery?
Damit solltest du sowas sehr leicht umsetzen können, und das kann der IE in der Regel auch.

Hier ein kleines Beispiel, wobei ich mal davon ausgehe, dass du die ID als GET-Parameter an das PHP-Script sendest:

Also in den Header der HTML-Seite einfach jQuery einbinden:

HTML-Code:
<!-- jQuery einbinden -->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

<!-- Nach dem Laden des Dokuments, den Load direkt ausführen -->
<script type="text/javascript">
$(document).ready(function() {
    $.ajax({
      url: 'script.php?id='+$('#containerMitId').attr('id'),
      success: function(data) {
          $('#zielContainer').html(data);
      }
    });
});
</script>
Alternativ, per Klick:

HTML-Code:
<script type="text/javascript">
$(document).ready(function() {
    $('#deinButton').click(function() {
        $.ajax({
          url: 'script.php?id='+$('#containerMitId').attr('id'),
          success: function(data) {
              $('#zielContainer').html(data);
          }
        });
    });
});
</script>

Das war's. Finde ich sehr simple, und ich mach mir seit es jQuery oder andere Framworks gibt auch nicht mehr die Mühe alles in Javascript neu zu coden, außer es geht eben nicht anders=)
__________________
www.simon-koehler.com
Zeimn ist offline   Mit Zitat antworten
Alt 23-12-2011, 09:29   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 10
Hallo Zeimn,
danke das du mir bei meinem Problem hilfst. Mit jQeury habe ich es auch schon probiert. Bin da ebenfalls nicht weiter gekommen.

Ich sag dir mal konkret, wie ich es mit jQuery gemacht habe.

Hier meine HTML-Zelle aus der ich den id-Wert '15847' übergeben will:
HTML-Code:
<td name="mitglied1" id="15847" class="mg_name">NAME</td>
Hier die HTML-Zelle in die der Rückgabewert eingetragen werden soll:
HTML-Code:
<td name="mg1_z1" id="mg1_z1" class="mg_zeilen"></td>

Hier meine php-Datei:
PHP-Code:
require_once("config.php");

$passNr $_POST['passNr'];
//$passNr = "15847";


$tabelle "uttv_ergebnisse";

if (isset(
$_POST['passNr'])){
    
$abfrage "SELECT COUNT(passNr_heim) AS anzahl FROM $tabelle WHERE passNr_heim = '$passNr'";
    
$abfrage2 "SELECT COUNT(passNr_heim) AS anzahl2 FROM $tabelle WHERE passNr_heim = '$passNr' AND saetze_heim > saetze_gast";

    
$result mysql_query($abfrage) or die(mysql_error());
    
$result2 mysql_query($abfrage2) or die(mysql_error());

    
$spiele mysql_fetch_assoc($result);
    
$spiele $spiele['anzahl'];
    
    
$siege mysql_fetch_assoc($result2);
    
$siege $siege['anzahl2'];
    
    
$rechnung $siege['anzahl2']/$spiele['anzahl'];
    
$faktor sprintf("%.2f"$rechnung);

    
$spiele['spiele'] = $spiele;
    
$siege['siege'] = $siege;
    
$faktor['faktor'] = $faktor;

    echo 
json_encode($spiele);
    
//echo json_encode($siege); //solle später auch übergeben werden
    //echo json_encode($faktor); //soll später auch übergeben werden
}
else{
    
$spiele['fehler'] = "Fehler bei Variableübergabe!";
    echo 
json_encode($spiele);
}
?> 

und zu guter letzt mein jQuery-Script:
HTML-Code:
<script type="text/javascript">
$(document).ready(function() {
        //for(i = 1; i<22; i++){
            var abfrage = document.getElementsByName("mitglied1")[0].id;  //bei aktivierter for-Schleife hätte ich ("mitglied"+i)[0].id; geschrieben
            var passNr = abfrage;
            $.ajax({
                type: 'POST',
                async: false,
                url: '/php/mitglieder_detail.php',
                dataType: 'json',
                data: "passNr="+ passNr,
                success: function(data){
                    document.getElementById("mg1_z1").innerHTML = data.spiele; // bei aktivierter for-schleife hätte ich hier ("mg"+i+"_z1").innerHTML geschrieben
                },
                error: function(data){
                    alert(data.fehler);
                },
            });
        //}        
});
</script>
Erschwert wird das ganze auch dadurch, dass ich derzeit 21 solcher Zellen habe, d.h. die ajax-Funktion sollte in einer for-schleife ablaufen.

Das war mein Versuch über jQuery. Leider passiert hier gar nichts. Ich bekomme keine Fehlermeldung, kein 'undefinded', gar nichts. Irgendwo habe ich da einen Hund drinnen, und da ich - wie bereits erwähnt - in JavaScript nicht sattelfest bin, tu ich mir mit der Fehlersuche verdammt schwer.
spastman1 ist offline   Mit Zitat antworten
Alt 23-12-2011, 12:07   #5 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Vorab:
  • Ein essentielles Tool für die JavaScript-Entwicklung ist FireBug. Mit diesem FireFox-AddOn kannst Du Dir z.B. unter »Netzwerk« ansehen, welche Daten Deine Seite versendet und empfängt.

  • Wenn man jQuery einsetzt, solltest man das möglichst durchgängig tun.
    Code:
    $("#mg1_z1").html(data);
    ... umgeht fast alle Cross-Browser-Probleme, die man sich mit reinem JavaScript einhandeln kann:
    Zitat:
    Zitat von spastman1 Beitrag anzeigen
    Code:
     document.getElementById("mg1_z1").innerHTML = data;
  • Du solltest Dir bewusst sein, das Ladeprozesse immer asynchron ablaufen. D.h. sie werden zu einem bestimmten Zeitpunkt in der Codeausführung angestoßen, aber zu einem späteren Zeitpunkt abgeschlossen (und zwar nicht unbedingt in der Reihnefolge in der sie initiert wurden). Um das kontrollieren zu können, arbeitet man mit sog. CallBack-Funktionen. Diese haben bei ihrer Ausführung, dann aber (i.d.R.) keinen Zugriff mehr auf die Werte und Variablen, die zum Zeitpunkt ihrer Deklaration in der auslösenden Funktion aktuell waren. Das i aus Deiner Schleife wäre also in der CallBackFunktion nicht mehr definiert bzw. hätte dort einen ganz anderen Wert.

  • Es ist übrigens generell nicht zu empfehlen AJAX-Requests in einer Schleife abzufeuern. Das sorgt nur für unötiges Chaos und überflüssige Ladevorgänge. Stattdessen würde ich Dir empfehlen mit nur einem Request zu arbeiten, die Schleife serverseitig auszuführen und die Daten gesammelt JSON- oder XML-formatiert zurückzuliefern.

  • Was PHP und MySQL angeht, bin ich leider kein Profi, aber das sieht zumindest seltasm aus und lässt sich sicher vereinfachen:
    Zitat:
    Zitat von spastman1 Beitrag anzeigen
    PHP-Code:
    $spiele mysql_fetch_assoc($result);
    $spiele $spiele['anzahl']; 
    $spiele['spiele'] = $spiele
    echo 
    json_encode($spiele); 


Aber .... machst Du Dir die Sache nicht unnötig schwer?!

Wenn ich Dich richtig verstanden habe, geht es doch darum die Inhalte einer Tabelle zuaktualliesieren?! Wäre es da nicht einfach einfach die komplette Tabelle in PHP neu zu generieren, per AJAX zu laden und dann auszutauschen?
PHP müsste dafür nur eine ganz normalen (X)HTML-Tabelle generieren und in JS würde diese Zeile ausreichen:
Code:
$('#tabellenContainer').load('/php/mitglieder_detail.php');
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (23-12-2011 um 12:12 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 24-12-2011, 12:59   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 10
Hallo Martin,
danke für deine Antwort. Das der Ladeprozess asynchron ablauft, habe ich bereits herausgefunden. Deshalb habe ich auch folgenden Code eingebaut:
HTML-Code:
async: false,
Damit wird das Script erst weiter abgearbeitet, wenn eine Antwort erfolgt ist (So habe ich das zumindest aufgefasst). Dieses "async: false," ist aber auch nicht ideal, da damit unter Umständen die gesamte Seite lahmgelegt werden kann, wenn ein Request abschmiert.

So wie ich das sehe, werde ich wohl deinem Rat folgen, und das Ganze in PHP programmieren. Ob ich die Tabelle dynamisch mit PHP ausgebe,

oder

die Abfrage-Ergebnisse in einem Array speichere, die PHP-Datei mit 'include' in meine Site einbinde und den entsprechenden Array-Wert in richtigen Tabellenfeld mit echo ausgebe, weiß ich noch nicht.

Werde mich auf jeden Fall mal dahinter klemmen. Mal sehen was rauskommt. Ich melde mich dann nochmal.

Danke euch beiden für eure Hilfe. Ich wünsche noch ein frohes Fest.

MfG
spastman1
spastman1 ist offline   Mit Zitat antworten
Alt 24-12-2011, 13:37   #7 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von spastman1 Beitrag anzeigen
Das der Ladeprozess asynchron ablauft, habe ich bereits herausgefunden. Deshalb habe ich auch folgenden Code eingebaut:
HTML-Code:
async: false,
Damit wird das Script erst weiter abgearbeitet, wenn eine Antwort erfolgt ist (So habe ich das zumindest aufgefasst).
Ajax ist ein Abkürzung für »Asynchronous JavaScript and XML«. Das synchron einsetzen zu wollen, ist also ein Widerspruch in sich!

async:false solltest Du deshalb so schnell wie möglich wieder vergessen. Das ist also ein Parameter der nur in absoluten Ausnahmefällen Sinn macht. Hier definitv nicht:
Zitat:
Zitat von spastman1 Beitrag anzeigen
Dieses "async: false," ist aber auch nicht ideal, da damit unter Umständen die gesamte Seite lahmgelegt werden kann, wenn ein Request abschmiert.

Zitat:
Zitat von spastman1 Beitrag anzeigen
So wie ich das sehe, werde ich wohl deinem Rat folgen, und das Ganze in PHP programmieren. Ob ich die Tabelle dynamisch mit PHP ausgebe,

oder

die Abfrage-Ergebnisse in einem Array speichere, die PHP-Datei mit 'include' in meine Site einbinde und den entsprechenden Array-Wert in richtigen Tabellenfeld mit echo ausgebe, weiß ich noch nicht.
Ich verstehe nicht ganz, wo da der Unterschied liegt – außer dass das include die Sache unnötig verkompliziert
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 25-12-2011, 08:22   #8 (permalink)
NCC 1701 D
 
Benutzerbild von speedjunkie
 
Registriert seit: Oct 2009
Ort: Metropolregion Hamburg
Beiträge: 588
Mich wundert, dass nur der 9’er sich weigert. Microsoft hat ja bekanntermaßen seine eigene Vorstellung von Browsern und Internet.

Musst mal darauf achten, wenn das Zeichen, das wie ein Parkverbotsschild aussieht, blau leuchtet, bzw. der Kompatibilitätsmodus.

Gibt’s eine Fehlermeldung?

Die Error Methode sieht anders aus:


ActionScript:
  1. errorfunction(xhr, errMSG, err)
  2.         {/*Parameter: XMLHttpRequest-Objekt, Zeichenkette mit Beschreibung des Fehlers, Error-Objekt*/
  3.             alert("Ajax-Anfrage fehlgeschlagen: " + errMSG)
  4.         }

Ansonsten die Daten in eine serielle Reihenfolge erstellen wie bei einem Formular oder jsonp falls Du Same-Domain Richtlinien Moderne Browser verletzt.
Angehängte Grafiken
Dateityp: png IE9.png (6,2 KB, 5x aufgerufen)
__________________
just be Daniel
JUNK FOOD: JavaScript Core Reference
speedjunkie ist offline   Mit Zitat antworten
Alt 27-12-2011, 09:18   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 10
Hallo Martin,
ich verstehe jetzt nicht ganz, warum das include das ganze verkompliziert? Ob die Abfrage-Ergebnisse per Java/jQeuery/... in meine Site geladen werden, oder sich die Ergebnisse bereits in meiner Seite befinden (mittels include) ist doch egal.
Der einzige "Nachteil" bei meiner derzeitigen Vorgehensweise ist (ich habe es mit include gemacht), dass die Tabelle zur Zeit nicht dynamisch erzeugen lasse.


@speedjunkie
Danke für deine Antwort. Leider kann ich die Fehlermeldung nicht mehr "erzeugen", da ich jetzt alles über php gelöst habe.

Aber danke für deinen Tipp mit der Error-Methode. Werde das bestimmt noch einmal benötigen.
spastman1 ist offline   Mit Zitat antworten
Alt 27-12-2011, 10:51   #10 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von spastman1 Beitrag anzeigen
ich verstehe jetzt nicht ganz, warum das include das ganze verkompliziert? Ob die Abfrage-Ergebnisse per Java/jQeuery/... in meine Site geladen werden, oder sich die Ergebnisse bereits in meiner Seite befinden (mittels include) ist doch egal.
Der einzige "Nachteil" bei meiner derzeitigen Vorgehensweise ist (ich habe es mit include gemacht), dass die Tabelle zur Zeit nicht dynamisch erzeugen lasse.
Eben das find ich kompliziert (und fehleranfällig):
Erst fummels Du in einer PHP-Datei ein Array zusammen und dann fügst Du desen Inhalte in einer anderen Datei in ein statische HTML-Tabelle ein.

Mal davon abgesehen, dass ich nicht verstehe, warum Du das auf zwei Dateien aufteilen willst, geht es schief, sobald auch nur eine Eintrag zu wenig im Array steht...

Zitat:
Zitat von spastman1 Beitrag anzeigen
Danke für deine Antwort. Leider kann ich die Fehlermeldung nicht mehr "erzeugen", da ich jetzt alles über php gelöst habe.
Wieso wolltest Du überhaupt mit AJAX arbeiten, wenn es sich augenscheinlich doch eh um eine statische Seite handelt AJAX macht IMHO nur da Sinn, wenn Inhalte einer HTML-Seite ausgetauscht werden müssen ohne gleich die ganze Seite neu zu laden.

Im übrigen schließen sich PHP und AJAX nicht aus, sondern ergänzen einander. Mit AJAX kann man (wie gesagt) super PHP-generierte HTML-Fragmente nachladen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
ajax, explorer, ie9, internet, javascript

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mittels ExternalInterface über AJAX Inhalte in DIVs laden CSA Flash CS3 Professional 3 15-05-2008 17:00
Ajax: HTML-Ausgabe roooot Alternative Technologien 6 07-11-2006 09:28
Trace Ausgabe funktioniert nicht CrazyPieter Flash Einsteiger 3 16-02-2006 12:43
Ausgabe funktioniert nicht Warum? spacemedia PHP und MySQL 8 16-10-2003 14:03
Flash Variable-Werte mittels JavaScript ändern ChriKle Flash 4 und Flash 5 0 28-08-2002 17:37


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele