Autor Zpráva
mark
Profil
zdravím, s AJAXom začínam.

Mám súbor index.php:

<script>
sendRequest("retazec, spracuj.php");
function createXhr ()
  {
  var xhr = null;
  if (window.XMLHttpRequest)
    {
    xhr = new XMLHttpRequest ();
    }
  else
    {
    if (window.ActiveXObject)
      {
      try { xhr = new ActiveXObject ("Msxml2.XMLHTTP"); }
      catch (e)
        {
        try { xhr = new ActiveXObject ("Microsoft.XMLHTTP"); }
        catch (e) {}
        }
      }
    return xhr;
    }
  }

function sendRequest (data, url)
  {
  var xhr = createXhr ();
  if (xhr)
    {
    xhr.open ("POST", url);
    xhr.onreadystatechange = function () { if (receiveResponse (xhr)) xhr = null; };
    xhr.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
    xhr.send (data);
    }
  return xhr;
  }
</script>


A mám tiež súbor spracuj.php:

<?php
  mysql_connect("server", "login", "heslo");
  mysql_select_db("databaza");
  $text = "nejaky_retazec";
  mysql_query("insert into tabulka (text) values ('".$text."')");
?>


Keď načíta index.php, mala by sa spustiť funkcia, ktorá odošle AJAXom dáta serveru a ten spustí zápis do databázy (na začiatok obyčajný text a nie preposlaná premenná). Lenže skripty nefungujú. Žiadne dáta sa do databázy neodošlú, pritom súbor spracuj.php keď samostatne spustím, funguje. Neviete prosím, v čom je chyba? Neviem si rady. ďakujem.
bohyn
Profil
sendRequest("retazec", "spracuj.php");
mark
Profil
nefunguje....
doplním ešte: mám to na localhoste, som pripojený na databázu a súbor index.php tiež vytvoril spojenie XMLHttpRequest, čiže chyba možno bude v nejakých mojich nastaveniach, alebo vo funkcii sendRequest.
mark
Profil
ale kde, to netuším.....
srigi
Profil
Tie data, ktore "cpes" do xhr.send (data) musis spravne naformatovat! Sprav to napr. takto:
xhr.send(getInputVal());

function getInputVal() {
  var text1 = document.getElementById('twn').value;
  town = 'town=' + encodeURI(text1); // UTF-8 friendly encoding
  return town;
}


A to je vsetko, malo by to fungovat. Este odporucam dve veci:

1. ak pouzivas UFT-8 kodovanie (mal by si), tak uprav header takto:
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");


2. inicializaciu httpxml objektu trocha rozsir o vetvu, ked AJAX nie je podporovany. Ja to mam spravene takto:
    if (window.XMLHttpRequest) {
      httpRequest = new XMLHttpRequest();

    } else if (window.ActiveXObject) {

      try {
        httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e) {
        httpRequest = new ActiveXObject('Msxml2.XMLHTTP');
      }

    } else {
      alert('Prehliacač nepodporuje technológiu AJAX');
    }
Chamurappi
Profil
Reaguji na srigiho:
Připadá mi docela hloupé dávat alert do funkce, která má vytvářet instanci XMLHttpRequestu. Logicky tam nepatří. Nejde-li AJAX, vrať null. Dostaneš-li null, pak teprve můžeš zařvat na uživatele (a když už, tak nějak srozumitelně).

Reaguji na marka:
Chybu máš ve funkci createXhr, v případě, že existuje třída window.XMLHttpRequest, sice naplníš proměnnou xhr, ale už ji nevrátíš.
srigi
Profil
Chamurappi
No vies, momentalne tiez s AJAXom iba experimentujem a moje skripty su ploche (bez funkcii) - okrem tej jednej getInputVal().
mark
Profil
Takže ako má prosím Vás vyzerať správne celý kód?
srigi
Profil
mark
inspiruj sa v zdrojovom kode napr. tejto stranky. JS.
mark
Profil
Tak sa mi s tým podarilo niečo spraviť. Maximálne som to zjednodušil:
function createXhr ()
  {
  var xhr = null;
  if (window.XMLHttpRequest) {xhr = new XMLHttpRequest ();}
  else {if (window.ActiveXObject) {xhr = new ActiveXObject ("Msxml2.XMLHTTP");} return xhr;}
  }

  var xhr = createXhr ();
  xhr.open ("GET", "spracuj.php");
  xhr.send ("retazec");

Skript mi však funguje len v IE (a to mám dokonca experimentálnu 4. verziu). V mozille (3.0) a opere (9.6) nefunguje, čo ma prekvapilo. Neviete, ako spraviť, aby fungoval vo všetkých prehliadačoch? Ako bude vizerať celý kód? ďakujem....

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0