Autor Zpráva
majo80
Profil *
Chcel by som načítať do DIVu externý php súbor ale nechcem využiť jquery. Potreboval by som poradiť ako to urobiť (pravdepodobne nejaká funkcia AJAXu).

Príklad:

<div id="semvloz"></div>

a do tohoto divu potrebujem načítať súbor:

subor.php

Ďakujem
_es
Profil
Univerzální funkce pro AJAX
Chamurappi
Profil
Reaguji na maja80:
Nebo moje univerzální funkce:
function nacti(url, callback)
{
  var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onreadystatechange = function()
  {
    if(xhr.readyState == 4)
      callback(xhr.responseText);
  };
  xhr.send("");
}
Použití:
nacti("subor.php", function(data)
{
  document.getElementById("semvloz").innerHTML = data;
})
peta
Profil
Chamurappi: Nebylo by lepsi otevirat request pres POST? GET ma omezenou delku prenasenych dat, ne?
_es
Profil
peta:
GET ma omezenou delku prenasenych dat, ne?
Prenášaných odkiaľ kam? Od servera ku klientovi nič obmedzené nie je.
majo80
Profil *
Ďakujem za rady, pomohlo to. Len sa mi vyskytol nový problém. Pri volaní jednej funkcie najskôr odosielam nejaké dáta na spracovanie do súboru napr. spracuj.php a v druhom kroku hneď po tomto odoslaní ich pomocou vyššie uvedeného načítavam do DIVu.
A tu je chyba: pomocou jednej funkcie odošlem položku tovaru do DB - zapíše sa správne. Ale ak ihneď načítam do DIVu stránku, ktorá zabezpečuje výpis z DB tak sa tam tovar ktorý som práve odoslal ešte nezobrazí. Až po ďalšom vložení tovaru sa v dive zobrazí ten skôr vložený ale opäť nie ten ktorý som práve vkladal,...atď. Snáď som to vysvetlil zrozumiteľne...
Ugo
Profil
to (jestli chápu správně) mi připadá na prohození v php scriptu kde nejprve vybíráš data a pak ukládáš
majo80
Profil *
Aj ja som si to myslel ale nie je to tak. Tu je ten javascript kód, ktorý zabezpečuje v prvom kroku odoslanie do súboru na spracovanie a uloženie do DB a druhá časť načítanie iného php súboru, ktorý sa zobrazí v DIVe:

function request( prodId, prodCena, prodKs ){  
    //vytvoreni nove promenne  
                    
    var request = null;  
    //gecko  
    if( window.XMLHttpRequest ){  
        request = new XMLHttpRequest()  
    }  
    else if ( window.ActiveXObject ){  
        //IE  
        request = new ActiveXObject("Microsoft.XMLHTTP");  
    }  
    //pokud se neporadilo vytvorit   
    if (!request) {  
         alert('Váš prehliadač nepodporuje ajax.');  
         return false;  
    }  
    
    request.open("GET", "dokosika.php?idpolozky=" + prodId + "&pocet=" + prodKs + "&cena=" + prodCena, true);  
    request.send( null );
    

        if (window.ActiveXObject)
        {
          httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
          httpRequest = new XMLHttpRequest();
        }
        
        httpRequest.open("GET", "/inc/cart.php", true);
        httpRequest.onreadystatechange= function () {
        
           
           document.getElementById("cart").innerHTML = httpRequest.responseText;
                                
        } ;
        httpRequest.send(null);
      
     
}
_es
Profil
majo80:
Základom je si najprv logiku aplikácie poriadne rozmyslieť a nie divoko vkladať kódy bez rozmyslenia si toho, čo sa v akom čase vykoná.

Ale ak ihneď načítam do DIVu stránku, ktorá zabezpečuje výpis z DB tak sa tam tovar ktorý som práve odoslal ešte nezobrazí.“ „druhá časť načítanie iného php súboru, ktorý sa zobrazí v DIVe
No však samozrejme, najprv musí prejsť uloženie do databázy a to nejaký čas trvá. Okrem toho na uvedenú vec netreba dva PHP skripty.
majo80
Profil *
A je možné nejakým spôsobom oddialiť vykonanie toho druhého scriptu na zobrazenie dát z DB? Napr. po jednej sekunde? Pozastavenie funkciou sleep() nefunguje - pozastaví sa všetko a potom všetko pokračuje s rovnakým výsledkom.
Fisir
Profil
Reaguji na maja80 [#10]:
Můžeš např. pomocí JSONu zjisti, zda už se daná operace provedla a potom zahájit druhou.
_es
Profil
majo80:
A je možné nejakým spôsobom oddialiť vykonanie toho druhého scriptu na zobrazenie dát z DB?
Najlepšie je na uvedený účel použiť len jeden PHP skript.
majo80
Profil *
Fisir:
S JSON som ešte vôbec nepracoval, môžeš prosím poradiť ako na to? Niečo som čítal na internete ale zatiaľ nechápem ako by som ho mohol využiť v mojom prípade.

_es:
Niečo ako odoslať dáta a tým istým scriptom ich aj vypísať? To som robil cez JQUERY cez samotný ajax neviem ako na to.
Fisir
Profil
Reaguji na maja80 [#13]:
môžeš prosím poradiť ako na to?
Jednoduše:

JavaScript

$.getJSON('tvujscript.php', function(ret) {
      if(ret.result == "1"){
          /* Jo, provedeno */
      } else {
          /* Ne, neprovedeno */
      };
});

PHP

$ret = array();
if(/* Podminka, jestli je hotovo */){
$ret['result'] = '1';
} else {
$ret['result'] = '0';
};
$return = json_encode($ret);
echo $return;
exit;
K JavaScriptové části potřebuješ jQuery.
_es
Profil
majo80:
Niečo ako odoslať dáta a tým istým scriptom ich aj vypísať? To som robil cez JQUERY cez samotný ajax neviem ako na to.
No veď to je predsa základný princíp HTTP komunikácie HTTP protokol, či konkrétnejšie AJAXu, čo je vlastne len používanie objektu XMLHttpRequest, na odoslanie menej dát z prehliadača metóda GET, pre viac dát z prehliadača metóda POST . Asi by si si mal toho naštudovať oveľa viac, než začneš robiť niečo ako e-shop.

Fisir:
K JavaScriptové části potřebuješ jQuery.
Nepotrebuje, stačí mu upraviť si hore spomenuté funkcie. Okrem toho priamo písal, že jQuery nechce.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0