Probleme Ajax...

Discutii legate de AJAX, jQuery, MooTools, Prototype, Dojo, Yahoo! UI Library,script.aculo.us, ExtJS,AngularJS, Backbone.js, Ember.js, KnockoutJS

Moderator: Moderatori

Avatar utilizator
adyre
Senior Member
Mesaje: 491
Membru din: Lun Dec 06, 2004 9:36 pm
Localitate: Buzau
Contact:

Probleme Ajax...

Mesajde adyre » Vin Oct 12, 2007 4:29 pm

Am fisierul: newsletter.php

Cod: Selectaţi tot

<script language="javascript" type="text/javascript">
function getData(fisier){
    if(XMLHttpRequestObject) {
         XMLHttpRequestObject.open("POST", fisier);
         XMLHttpRequestObject.onreadystatechange = function () {
             if(XMLHttpRequestObject.status == 200) {
                var catreMesaj = document.getElementById("mesaj");
                catreMesaj.innerHTML = "<div>" + XMLHttpRequestObject.reponseText; + "</div>";
             }
         }
    XMLHttpRequestObject.send(null);
    }
}

function adaugaNewsletter() {
     var catreMesaj = document.getElementById("mesaj");
     catreMesaj.innerHTML = "<div></div>";
     if(document.getElementById("email").value) {
          getData("news_add.php");
     }
}
</script>

<div id="mesaj">aaa</div>
form action="#" method="post" onSubmit="return adaugaNewsletter();">
Adresa e-mail:<br>
<input type="text" class="input_text" style="width: 175px;" name="email" id="email">
<input type="image" src="trimite.gif"></center>
</form>


Si fisierul PHP news_add.php:

Cod: Selectaţi tot

include("connect.php");
if(empty($HTTP_POST_VARS)) {
    echo "<meta http-equiv=\"refresh\" content=\"0; url=" . $domain . "\">";
}
else {
    $email = strip_tags($_POST['email']);
    //VERIFICARE DACA ADRESA DE E-MAIl ESTE CORECTA
    DEFINE('VERIFICA_MAIL',eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email));
    if(VERIFICA_MAIL == FALSE) {
       echo "ADRESA INVALIDA";
    } else {
    $sql = mysql_query("SELECT * FROM newsletter WHERE email='" . $email . "'") or die ("Nu s-a putut realiza verificarea!");
    if(mysql_num_rows($sql) != '0') {
       echo "ADRESA DE E-MAIL EXISTENTA IN BAZA DE DATE!";
} else {
    $sql_ip = mysql_query("SELECT dataReg, IP FROM newsletter WHERE ADDTIME(dataReg, '00:03:00')>'" . date('H:i:s') . "' AND data='" . date('Y-m-d') . "' AND IP='" . $_SERVER['REMOTE_ADDR'] . "'") or die ("Nu s-a putut realiza verificarea!");
    if(mysql_num_rows($sql_ip) != '0') {
        echo "NU SE POATE REALIZA DE PE ACEST CALCULATOR DECAT O INREGISTRARE LA FIECARE 3 MINUTE!";
} else {
    mysql_query("INSERT INTO newsletter (email, data, dataReg, IP) VALUES('" . $email . "', NOW(), NOW(), '" . $_SERVER['REMOTE_ADDR'] . "')") or die ("MAILUL DUMNEAVOASTRA NU A PUTUT FI INTRODUS IN BAZA DE DATE!");
    echo "INSCRIERE REALIZATA CU SUCCES!";
}
}
}
}


E posibil ca PHP-ul sa nu fie corect... ca l-am aranjat acum sa arate bine (era cu TAB identat si se insira pe distanta mare)....

Nush unde e buba ca nu mere.. Daca fac normal cu action="fisierulphp" merge perfect insa eu vreau ca acele rezultatele sa le afiseze in div-ul meu.. where is THE PROBLEM?

PS: Daca o sa fie vreo explicatie, va rog mai pe indelete ca sunt newbie in Ajax

Multam anticipat!


Viata e prea scurta sa faci un lucru singur. Cere AJUTOR!

dechim
Senior Member
Mesaje: 1486
Membru din: Mar Mai 10, 2005 11:53 pm
Localitate: Drobeta Turnu Severin

Mesajde dechim » Vin Oct 12, 2007 11:21 pm

Nu stiu care-i cauza, cred ca nu merge la onSubmit sa se actioneze prin intermediul obj. XMLHttpRequest pentru ca browserul executa si "action".
Trebuie sa setam noi header-ul: XMLHttpRequest.setRequestHeader(..)

Asa merge:
Fisierul newsletter.htm :

<script language="javascript" type="text/javascript">

function getData(url, ele, str) {
var xmlHttp=null;
try { xmlHttp=new XMLHttpRequest();
} catch (e) {
try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (xmlHttp==null) {
alert ("Acest browser nu suporta HTTP Request");
return ;
}
xmlHttp.onreadystatechange= function() {
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
document.getElementById(ele).style.visibility = 'visible';
document.getElementById(ele).innerHTML=xmlHttp.responseText;
} else {
document.getElementById(ele).innerHTML = "Asteptati !";
}
}
xmlHttp.open('POST', url, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlHttp.setRequestHeader("Content-Length", str.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(str);
}


function adaugaNewsletter() {
if(document.getElementById("email").value) {
getData("news_add.php","mesaj","email="+document.getElementById("email").value);
}
}
</script>

<div id="mesaj">aaa</div>
<form action="#" method="post">
Adresa e-mail:<br>
<input type="text" class="input_text" style="width: 175px;" name="email" id="email">
<input type="button" value="Trimite" onClick="adaugaNewsletter();" />
</form>


Fisierul news_add.php l-am scurtat:

<?php
$email = strip_tags($_POST['email']);
echo "Emailul $email a fost adaugat !!!";
?>

dechim
Senior Member
Mesaje: 1486
Membru din: Mar Mai 10, 2005 11:53 pm
Localitate: Drobeta Turnu Severin

Mesajde dechim » Vin Oct 12, 2007 11:37 pm

Revin, ideea AJAX este sa nu facem submit ci sa actualizam pagina fara a o trimite serverului ca sa o schimbe cu alta.
Mai usor este cu GET, oricum nu apare nimic in campul "Address".

Avatar utilizator
adyre
Senior Member
Mesaje: 491
Membru din: Lun Dec 06, 2004 9:36 pm
Localitate: Buzau
Contact:

Mesajde adyre » Vin Oct 12, 2007 11:44 pm

Thanks.. asta era... Nu-i problema la news_add ca acolo lucrez eu...

Ms mult...
Viata e prea scurta sa faci un lucru singur. Cere AJUTOR!

dechim
Senior Member
Mesaje: 1486
Membru din: Mar Mai 10, 2005 11:53 pm
Localitate: Drobeta Turnu Severin

Mesajde dechim » Sâm Oct 20, 2007 12:53 pm

adyre,
In topicul "Firefox afiseaza raspuns Ajax, Internet Explorer nu"
( http://www.phpromania.net/forum/viewtopic.php?t=8218 )
"agoia" a avut problema si a gasit rezolvare.
Am imbunatatit si eu functia getData(), asa cum se spune acolo,
pentru a forta IE sa faca request chiar daca cererea este identica cu precedenta.
In fata liniei:

Cod: Selectaţi tot

 xmlHttp.open('POST', url, true);

am introdus :

Cod: Selectaţi tot

if (url.indexOf('&')>0) varx='&'; else varx='?';
url += varx+"&xyxyxy="+(Math.floor(Math.random()*9999999)).toString();

Se trimite o variabila a carei valoare se modifica la fiecare request.
M-am gandit ca-i bine sa o ai in arsenal, vad ca altii sapa cu mult inaintea noastra si de ce sa nu invatam.
Chiar e bun forumul asta!


Înapoi la “Librarii Javascript”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 23 vizitatori