php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-08-2007, 11:14
deklarmart
 Junior Member
Links : Onlinestatus : deklarmart ist offline
Registriert seit: Sep 2002
Ort: # my_home.php - line 213 ;-)
Beiträge: 112
deklarmart ist zur Zeit noch ein unbeschriebenes Blatt
Standard Serverseitiges Error-Management für Ajax

Guten morgen zusammen.

Nach längerer Zeit brauche ich mal wieder ein paar Tips von euch, nachdem ewige Recherchen im Internet mehr bzw. weniger erfolgreich waren. Es geht um die Frage, ob und wie man mit Serverseitigen Fehlern umgehen kann, wenn man mit AJAX arbeitet.

Beispiel:
Bisher haben meine Scripte die häufigsten Fehlerfälle aufgefangen und entsprechende Meldungen für den Benutzer ausgegeben:

PHP-Code:
$dbCon db_connect();
if(
$dbCon) {
  
$id intval($_GET['id']);
  
$dbRes db_execute('SELECT * FROM tabelle WHERE id='.$id);

  if(
$dbRes && mysql_num_rows($dbRes) != 0) {
    
$myObject = Array();
    
$myObject = [...] usw. [...]
  } else {
    
$errorMsg "Kein Datensatz gefunden!";
  }
} else {
  
$errorMsg "Datenbankverbindung nicht hergestellt!";

Fazit:
ENTWEDER gibt das Script das Ergebnis der Abfrage zurück, ODER eine Fehlermeldung.

Und genau dieses "ODER" im vorherigen Satz macht mir jetzt Probleme. Ich baue mir das Script mal so um, das es mir die Daten JavaScript lesbar aufbereitet (ich nehme hier mal JSON, um das Format geht es hier ja nicht!).

PHP-Code:
$dbCon db_connect();
if(
$dbCon) {
  
$id intval($_GET['id']);
  
$dbRes db_execute('SELECT * FROM tabelle WHERE id='.$id);

  if(
$dbRes && mysql_num_rows($dbRes) != 0) {
    
$myObject = Array();
    
$myObject = [...] usw. [...]
  } else {
    
$errorMsg "Kein Datensatz gefunden!";
  }
} else {
  
$errorMsg "Datenbankverbindung nicht hergestellt!";
}

if(
$errorMsg != '') {
  echo 
$myJson->encode($errorMsg);
} else {
  echo 
$myJson->encode($myObject);

Problem:
Das Problem ist nun, dass die JavaScript Funktion, die die AJAX Anfrage stellt, nicht weiß, ob ein Fehler oder ein Ergebnis zurück geliefert wird!

PHP-Code:
new Ajax.Request(test.php, {
  
method:'get',
  
onSuccess:  function(req) {
    var 
dat req.responseText.evalJSON();
    [...] 
verarbeiten der daten ODER anzeigen des fehlers [...]
  }
}); 
Denn entweder enthält die JavaScript Variable "dat" ein komplexes Objekt mit Daten aus der Datenbank ODER einen einfachen String mit der Fehlermeldung. Ich habe es in tausend verschiedenen Versuchen nicht geschafft, zu prüfen, wann was zurück kommt um im JavaScript entsprechend darauf zu reagieren!

Fragen:
  1. Ist der Ansatz den ich hier umsetzen möchte überhaupt sinnvoll?
  2. Gibt es andere Möglichkeiten, soetwas vielleicht viel eleganter zu lösen?
  3. Eigentlich hatte ich vor, nach dem einfachen Error-Management noch einen Schritt weiter zu gehen und JEDEM Ergebnis, welches vom Server-Script zurück kommt, einen Status zu verpassen (OK oder Fehler). Nach dem Prinzip:
    {"errorState":true,"errorMessage":"Kein Datensatz gefunden!"}null
    ODER
    {"errorState":false,"errorMessage":null} [...] hier das Objekt mit Daten [...]

Schon mal vielen Dank für eure Antworten.
__________________
GLORIA PERPETUA
Mit Zitat antworten
  #2 (permalink)  
Alt 15-08-2007, 11:35
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Warum setzt du 3 nicht einfach um? Dann ist das Problem doch gelöst...


Ansonsten suche er nach typeof, damit geht z.B. sowas
Code:
if( typeof this.img == 'undefined' ) return;
Mit Zitat antworten
  #3 (permalink)  
Alt 15-08-2007, 11:50
deklarmart
 Junior Member
Links : Onlinestatus : deklarmart ist offline
Registriert seit: Sep 2002
Ort: # my_home.php - line 213 ;-)
Beiträge: 112
deklarmart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ghostgambler
Warum setzt du 3 nicht einfach um? Dann ist das Problem doch gelöst...
Habe ich ja auch gemacht, aber irgendwie hat es nicht geklappt. Und zwar aus folgendem Grund: angenommen die Datenbank-Abfrage liefert ein gültiges Ergebnis zurück und ich bekomme von JSON ein 2-dimensionales Array:

PHP-Code:
while($row mysql_fetch_object($result)) {
  
$myObject[$i]['id'] = $row->id;
  
$myObject[$i]['class'] = $row->classcode;
  
$myObject[$i]['name'] = $row->name;
  
$i++;
}
echo 
$myJson->encode($myObject); 
Der Javascript wertet das Array nun aus:
PHP-Code:
var thisData thisRequest.responseText.evalJSON();
for(
i=0thisData.lengthi++) {
  $(
'classes').options[i] = new Option(thisData[i]['class']+' - '+thisData[i]['name'], thisData[i]['id']);

Soweit funktioniert das noch alles, denn NOCH haben wir die Status-Meldungen nicht dabei. Geben wir die nun zusätzlich aus:
PHP-Code:
echo $myJson->encode(array('errorState' => $errorStt);
echo 
$myJson->encode(array('errorMessage' => $errorMsg);
echo 
$myJson->encode($myObject); 
Das funktioniert nun nicht mehr, da die Schleife den ganzen JSON String nicht mehr als sauberes Array erkennt. Ich habe schon versucht mit Substr o.ä. irgendwie den Anfang vom JSON String zu entfernen und gesondert auszuwerten, aber genau das hat alles nicht geklappt...
Ich kann mir vorstellen, das ich irgendwo nur einen blöden Denkfehler drin habe, aber ich komme nicht drauf.
__________________
GLORIA PERPETUA
Mit Zitat antworten
  #4 (permalink)  
Alt 15-08-2007, 12:32
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso packst du auch mehrere Objekte in eine Rückgabe?
Mach ein Objekt "Response" und die Fehler-Klassen sind nur Attribute davon, dann alles zusammen encoden, ab zum Browser und im Browser das komplette EINE Objekt wieder aufrufen.
Wenn dann
Code:
response.errors.length != 0
dann gab es einen Fehler, den man dann mit
Code:
response.errors.each(function (s) {document.write(s.value);});
ausgeben kann (sofern man script.aculo.us verwendet~)
Mit Zitat antworten
  #5 (permalink)  
Alt 15-08-2007, 12:42
deklarmart
 Junior Member
Links : Onlinestatus : deklarmart ist offline
Registriert seit: Sep 2002
Ort: # my_home.php - line 213 ;-)
Beiträge: 112
deklarmart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Au wie dämlich, das wars! O_o
Die response Daten sind bei mir schon teilweise große Objekte, bin irgendwie nicht drauf gekommen, die nochmal zusätzlich in ein weiteres Objekt zu packen mit den Fehlereigenschaften wie du es sagtest...
Manchmal ist man so eingefahren in irgendwelche Tutorials, echt unglaublich. Klappt jetzt wunderbar, vielen tausend Dank
__________________
GLORIA PERPETUA
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:51 Uhr.