Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ajax] Wysyłanie powiadomień e-mail
szczypior
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

Ostrzeżenie: (0%)
-----


Witam

Dodaję do mojego serwisu opcję powiadomień wiadomościami e-mail, w momencie gdy pojawi się nowy post w pytaniu ktore obserwuje jeden lub więcej userów. W tym celu wykorzystuje phpMailer'a oraz wysyłanie przez SMTP co umożliwia ta biblioteka. Wysyłanie odbywa się w momencie dodania nowego postu i niestety trwa kilka sekund, a ja nie chciałbym przez te kilka sekund "zanudzać" użytkownika czekaniem na zakończenie tego procesu. Dlatego wymyśliłem, żeby do wysyłania poczty zaangażować AJAX, licząc post użytkownika pojawi się na stronie zanim zakończy się wysyłanie.

Samo dodawanie posta do bazy odbywa się w innym pliku php, niż w którym została jego treść wpisana do formularza, dlatego korzystam z headera aby powrócić na tamtą stronę oraz aby zapobiedz kilkukrotnemu przesłaniu danych. I tu chyba właśnie tu jest problem, bo gdy zakomentuję header to poczta jest rozsyłana poprawnie.

Jak mogę obejść ten problem? A może macie pomysł na inne rozwiązanie problemu wysyłki maili?

Poniżej wklejam kod pliku który jest odpowiedzialny za wrzucanie danych do bazy i wywołanie pliku zajmującego się rozsyłaniem wiadomości.

  1. <?php
  2. // różne funkcje wrzucające treść posta do bazy itp
  3.  
  4.  
  5. echo '<html><body onload="process()"><script language="JavaScript">
  6.    var xmlHttp = createXmlHttpRequestObject();
  7.  
  8.    // tworzymy obiekt XMLHttpRequest
  9.    function createXmlHttpRequestObject()
  10.    {
  11.        var xmlHttp;
  12.        // dla przeglądarek poza IE 6 i starszych
  13.        try
  14.        {
  15.            // próba stworzenia obiektu XMLHttpRequest
  16.            xmlHttp = new XMLHttpRequest();
  17.        }
  18.        catch(e)
  19.        {
  20.            // zakładamy że IE6 lub starsza
  21.            var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
  22.            // sprawdzamy każdy identyfikator aż trafimy na działający
  23.            for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
  24.            {
  25.                try
  26.                {
  27.                    // próba stworzenia obiektu XMLHttpRequest
  28.                    xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
  29.                }
  30.                catch(e) {}
  31.            }
  32.        }
  33.        // zwraca stworzony obiekt albo komunikat o błędzie
  34.        if (!xmlHttp)
  35.        {
  36.            alert("Błąd podczas tworzenia wiadomości (XMLHttpRequest)");
  37.        }
  38.        else
  39.        {
  40.            return xmlHttp;
  41.        }
  42.    }
  43.  
  44.    //asynchroniczne wywołanie serwera
  45.    function process()
  46.    {
  47.        // kontynuuje gdy xmlHttp nie jest pusty
  48.        if (xmlHttp)
  49.        {
  50.            // próba połączenia z serwerem
  51.            try
  52.            {
  53.                var params = "question_id='.$id_pyt.'";
  54.                xmlHttp.open("POST", "mailer.php", true);
  55.                xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  56.                xmlHttp.setRequestHeader("Content-length", params.length);
  57.                xmlHttp.setRequestHeader("Connection", "close");
  58.                xmlHttp.send(params);
  59.            }
  60.            catch(e)
  61.            {
  62.                alert("Nie można nawiązać połącznia z serwerem:\n" + e.toString());
  63.            }
  64.        }
  65.    }
  66.    </script>
  67.    </body></html>';
  68. $referer  = $_SERVER['HTTP_REFERER'];
  69. header("Location: $referer");
  70. ?>


Pozdrawiam
Andrzej


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Wysyłanie odbywa się w momencie dodania nowego postu i niestety trwa kilka sekund

To nie kombinuj z wysyłaniem bezpośrednim, tylko zrób sobie kolejkę wiadomości. Jeśli trzeba wysłać nową - trafia nowy wpis do kolejki. Wykorzystanie tutaj AJAX tylko obejdzie problem, gdyż przy większym obciążeniu pojawią się problemy.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 17:34