[Ajax] Problem mit Ajax

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Atkaz, 2. April 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. April 2010
    Problem mit Ajax

    Hallo Leute ich steh mal wieder auf dem Schlauch...?(

    das Problem ist..AJAX.. ich hab eine PN-System auf meine Website eingebaut. Beim abschicken der Mail soll die Seite nicht neugeladen werden, sondern nur mit einer alert() bestätigt werden.

    Nun habe ich das Problem, dass ich die alert() nicht in die MailSenden() Functoin eintragen kann, da diese sonst "unregelmäßig" funktioniert, hört sich komisch an, ist aber so. Das heißt die die Mail wird nur dann abgeschickt, wenn ich etwas im script verändere z.b ein Leerzeichen setze, sonst nicht ?(

    wenn ich die alert() aber an einer anderen Stele direkt im HTTPRequest einfüge funktioniert das ganze. Jetzt besteht mein Problem darin , dass ich die HTTPRequest in einer externen Datei abgespeichert habe und diese auch immer wieder benutzen will doch kann ich nicht da dort ja die alert("Mail abgeschickt") steht.

    ich hoffe ich könnte es einigermaßen kurz und deutlich erklären.
    Würd mich über eure Hilfe freuen

    Funtion MailSenden

    HTML:
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Unbenanntes Dokument</title>
    <script type="text/javascript" language="javascript"
     src="XMLHTTPRequest.js"></script> 
     
    <script type="text/javascript">
    
    function Mailsenden(form) {
    var Mail = document.getElementById("Mail").value;
    var Betreff = document.getElementById("betreff").value;
    
    var postVars = '&Betreff=' + Betreff; 
    postVars += '&Mail=' + Mail; 
    sendeHTTPRequest('post','Mail.php',postVars);
    }
    
     function statusWechsel(meinRequest) {
     if ((meinRequest.readyState == 4) && (meinRequest.status == 200)) {
     
     [COLOR="Red"] -----wenn ich die alert() hier einfüge, funktioniert das "unregelmäßig"------------ [/COLOR]
     
     }
     }
    
    
    function eingabe(form) {
     
    if (form.Betreff.value != "" && form.Mail.value !="" ){
    Mailsenden();
    return true;
    
    }
    else {alert("Bitte füllen Sie alle Felder korrekt aus");}
    return false;
    }
    </script>
    
    ........
    
    XMLHTTPRequest.js

    HTML:
     // XMLHTTPRequest.js
     //
     // Bibliotheksdatei zum Senden eines
     // AJAX-Requests
    
     function sendeHTTPRequest(methode,url,postVars) {
     
     // HTTP-Request-Objekt erzeugen
     var meinRequest = false;
     if (window.XMLHttpRequest) { 
     // alle Browser ausser IE ...
     meinRequest = new XMLHttpRequest();
     } 
     else if (window.ActiveXObject) { 
     // Internet Explorer - hier müssen wir etwas aufpassen
     try { // alte Versionen von MSXML
     meinRequest = 
     new ActiveXObject("Msxml2.XMLHTTP");
     } 
     catch (e) {
     try { // IE5 oder höher 
     meinRequest = 
     new ActiveXObject("Microsoft.XMLHTTP");
     } 
     catch (e) {} // hoffnungsloser Fall 
     } 
     }
     if (!meinRequest) {
     alert("Ihr Browser kann offenbar noch kein AJAX!");
     return false;
     }
     // Request öffnen und konfigurieren
     meinRequest.open(methode, url, true);
     // Spezialbehandlung für einige ältere Mozilla-Versionen
     if (meinRequest.overrideMimeType) {
     meinRequest.overrideMimeType('text/xml');
     }
     // Zusätzlichen Header für POST-Requests setzen
     if (methode.toLowerCase() == 'post') {
     meinRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
     }
     // Callback-Methode definieren
     meinRequest.onreadystatechange = function() { statusWechsel(meinRequest); };
     // Request senden
     meinRequest.send(postVars);
     [COLOR="Red"]alert("Mail wurde Abgeschikt");[/COLOR]<<<---So 
     funktioniert alles.
     
    
     return true;
     }
    
    
    Mail.php

    PHP:
    <? php 
    ini_set
    ( 'display_errors' 1 );
    error_reporting ( E_ALL );
    session_start ();

    include (
    "Klassen.php" );
    print 
    loginCheck ();
    $Produkt = new  datenObjekt ();


    $verbindung  mysql_connect  ( "#####" ,
    "#######" "#######" )
    or die (
    "keine Verbindung möglich.
     Benutzername oder Passwort sind falsch"
    );

    mysql_select_db ( "homepage" ) or die ( "Die Datenbank existiert nicht." );

    if (
    'POST'  ==  $_SERVER [ 'REQUEST_METHOD' ]) {
        if (!isset(
    $_POST [ 'Betreff' ],  $_POST [ 'Mail' ], $_POST [ 'Date' ], $_POST [ 'Abschicken' ], $_POST [ 'Empfanger' ])) {
            echo 
    "Benutze das Formular" ;
        exit;
        }
        }

    srand  ((double)  microtime () *  1000000 );
      
    $id rand ( 1 , 100000 ); 
    $Betreff mysql_real_escape_string ( $_POST [ "Betreff" ]);
    $Mail mysql_real_escape_string ( $_POST [ "Mail" ]);
    $Artikel  $_SESSION [ "ArtikelNr" ];
    $Datun  $_POST [ 'Date' ];
    $Empfanger $_SESSION [ 'UserID' ];
    $Absender  $_SESSION [ 'user' ][ 'ID' ];
    $AbsenderName  $_SESSION [ 'user' ][ 'Username' ];
    $EmpfangerName  = $_SESSION [ 'Username' ];


    $Eingang  "INSERT INTO maileingang (ID,Empfanger,ArtikelNr,Absender,AbsenderName,Mail,Datum,Betreff)
    VALUES
    ('
    $id ',' $Empfanger ',' $Artikel ',' $Absender ',' $AbsenderName ',' $Mail ',' $Datun ',' $Betreff ')" ;

    $Ausgang  "INSERT INTO mailausgang (ID,Empfanger,ArtikelNr,EmpfangerName,Absender,Mail,Datum,Betreff)
    VALUES
    ('
    $id ',' $Empfanger ',' $Artikel ',' $EmpfangerName ',' $Absender ',' $Mail ',' $Datun ',' $Betreff ')" ;

    $EintragA  mysql_query ( $Eingang );
    $EintragB  mysql_query ( $Ausgang );


    if (
    $EintragA  ==  true  &&  $EintragB  == true ) {

    echo 
    " Mail Wurder Abgeschikt." ;
    }
    else
    {
    print 
    mysql_error ();  

    }

    ?>

    die Fehlerkonsole:

    Fehler: Kein Element gefunden
    Quelldatei: http://localhost/Mail.php
    Zeile: 2
     
  2. 2. April 2010
    AW: Problem mit Ajax

    Ganz unabhängig von deiner Frage (habe von AJAX keine Ahnung) hast du ein anderes Problem: SQL-Injection.

    Hier wird nicht gefiltert und die Variable dann in der SQL-Query verwendet:
    Also am besten so etwas wie mysql_real_escape_string benutzen.

    Und btw: Datum
     
  3. 2. April 2010
    AW: Problem mit Ajax

    Ok habs nun umgeändert..danke..
     
  4. 2. April 2010
    AW: Problem mit Ajax

    hier hast ne schönere ajax-klasse:
    Code:
    //XMLHttpRequest
    
    function AjaxRequest(url, options) {
     this.transport = (function() {
     var t = [ function() { return new XMLHttpRequest(); },
     function() { return new ActiveXObject("Microsoft.XMLHTTP"); },
     function() { return new ActiveXObject("Msxml2.XMLHTTP"); } ];
     
     for(var i = 0; i < 3; ++i) {
     try { return t[i](); }
     catch(e) {}
     }
     
     return false;
     })();
     
     var method = options.method || "post";
     method = (method == "get" || method == "post") ? method.toUpperCase() : "POST";
     
     var async = (typeof options.async == "boolean") ? options.async : true;
     
     this.dispatch(method, url, async, options);
     this.onStateChange();
    }
    
    AjaxRequest.prototype = {
     _completed: false,
     
     dispatch: function(method, url, async, options) {
     this.transport.open(method, url, async);
     this.setRequestHeaders(options);
     
     this.onSuccess = function() {};
     if(typeof options.onSuccess == "function")
     this.onSuccess = options.onSuccess;
     
     this.onFailure = function() {}
     if(typeof options.onFailure == "function")
     this.onFailure = options.onFailure;
     
     var self = this;
     this.transport.onreadystatechange = function() {
     self.onStateChange();
     };
     
     this.transport.send(options.parameters || null);
     },
     
     onStateChange: function() {
     var state = this.transport.readyState;
     if(state == 4 && !this._completed) {
     var status = this.transport.status || 0;
     this[(status >= 200 && status <= 300) ? "onSuccess" : "onFailure"](this.transport);
     this._completed = true;
     }
     },
     
     setRequestHeaders: function(options) {
     var headers = {
     'X-Requested-With': 'XMLHttpRequest',
     'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
     };
     
     headers['Content-type'] = "application/x-www-form-urlencoded";
     
     var encoding = 'UTF-8';
     if(options.encoding != "")
     encoding = options.encoding;
     
     headers['Content-type'] += '; Charset=' + encoding;
     
     if(this.transport.overrideMimeType 
     && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
     headers['Connection'] = 'close';
     
     for(var name in headers)
     this.transport.setRequestHeader(name, headers[name]);
     }
    };
    
    Code:
    new AjaxRequest("url.php", {
     method: "post | get",
     parameters: "name=value",
     async: true | false,
     
     onSuccess: function(ajax) {
     //request war erfolgreich
     },
     
     onFailure: function(ajax) {
     //request war nicht erfolgreich
     }
    });
    damit sollte es keine probleme mehr geben
     
  5. 3. April 2010
    AW: Problem mit Ajax

    Danke erstmal für das Script.

    aber irgendwie komme ich nicht weiter.

    Code:
    function Mailsenden(form) {
    var Mail = document.getElementById("Mail").value;
    var Betreff = document.getElementById("betreff").value;
    
    var postVars = 'Betreff=' + Betreff; 
    postVars += 'Mail=' + Mail; 
    
    new AjaxRequest("Mail.php", {
     method: "post",
     parameters: postVars,
     async: true,
     
     onSuccess: function(ajax) {
     alert("Mail wurde abgeschickt");
     },
     
     onFailure: function(ajax) {
     alert("Mail konnte nicht abgeschickt werden");
     }
    });
    }
    
    Wenn ich das so eintrage, bekomme ich "onFailure" zurück.

    Sorry dass ich frage, aber könntest du vielleicht erklären wie man die daten dort einfügt..?(

    --------------------------

    ich habe das jetzt etwas umgeändert, bekomme auch onSuccess: function(ajax) zurück. Die werte der Varibalen werden aber weiterhin nciht abgeschickt...

    neuer Versuch:
    Code:
     
    
    function Abschicken() {
    var name = document.getElementById('Name').value;
    var postVars = 'ArtikelNr=' + name;
    alert(postVars);
    
    new AjaxRequest("AjaxProbeScript.php", {
     method: "post",
     parameters: postVars, <<<<---wird nicht abgeschickt.
     async: true,
     
     onSuccess: function(ajax) {
     alert(ajax.responseText);
     },
     
     onFailure: function(ajax) {
     alert("es nicht Klappt");
     }
    });
    
    
     
  6. 3. April 2010
    AW: Problem mit Ajax

    postvars musst du mit nem "&" trennen.
    bei mir klappt es ohne probleme
     
  7. 3. April 2010
    AW: Problem mit Ajax

    hmm..bei mir irgendwie nicht

    so meinst du das, oder

    Code:
    ....
    var name = document.getElementById('Name').value;
    var postVars = '&ArtikelNr=' + name;
    .....
    new AjaxRequest("AjaxProbeScript.php", {
     method: "post",
     parameters: postVars, <<-- ??
     async: true,
    
    .....
    
    ??
    die phpScript
    PHP:
    $name  $_POST [ 'name' ];
    echo 
    $name ;

    Fehler:
    Fehler: postVars is not defined
    Quelldatei: http://localhost/AjaxProbe.php
    Zeile: 18
     
  8. 3. April 2010
    AW: Problem mit Ajax

    du musst die variable postVars schon da definieren wo auch der ajax-request is...
    und $_POST['name']; muss dann $_POST['ArtikelNr']; lauten.

    aja und das "&" kommt nur als trenner zum einsatz wenn mehrere argumente übergeben werden.

    das sind alles grundlagen -> closed
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.