Autor Zpráva
Tomeco
Profil
Ahoj,
potřebuju volat dva AJAXy po sobě na jeden stisk tlačítka, ale ten druhý se neprovede a hlásí chybu "Cannot set property 'className' of null", pořípadě "...'innerHTML' of null".
Když je prohodím tak zase funguje jen ten první.

<script>

function ajax_text(url,id) {
  try {
    var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
    request.open("GET", url, false);
    request.send(null);
    document.getElementById(id).innerHTML = request.responseText;
    return "";
  }
  catch (e) {
    alert("AJAX request failed:\n"+e);
    return "";
  }
}

function ajax_state(url,id) {
  try {
    var request2 = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
    request2.open("GET", url, false);
    request2.send(null);
    document.getElementById(id).className = request2.responseText;
    return "";
  }
  catch (e) {
    alert("AJAX request failed:\n"+e);
    return "";
  }
}

function ajax_both(url_text,id_text,url_state,id_state) {
    ajax_text(url_text,id_text);
    ajax_state(url_state,id_state);
};

function ajax_in2() {
    ajax_text("io?v1","td9");
    ajax_state("io?cPA1","td31");
};

</script>

Ani jeden z "pokusů" ajax_both, ajax_in2 nefunguje jak má.
AJAX není asynchronní nejspíš proto, že je to Webový server v jednočipu ATMEL a asi bude mít nějaká (mě neznámá) omezení.
Nicméně asynchonnost jsem také zkoušel a ta nefunguje vůbec.
Nevíte někdo kde mám chybu ?
Davex
Profil
Tomeco:
AJAX není asynchronní nejspíš proto, že je to Webový server v jednočipu ATMEL a asi bude mít nějaká (mě neznámá) omezení.
AJAX asynchronní je, ale tvůj pokus o AJAX je chybný. Výsledek není vracen ihned po zavolání request2.send(null), ale musíš si ho zpracovat ve funkci zavolané callbackem.

Podívej se na Chamurappiho funkci pro AJAX, ze které snad bude způsob použití AJAXu jasnější - Načítanie php súboru do DIV - ajax, nie jquery.
Tomeco
Profil
Obávám se že to jasnější není.
Jen ty MOJE AJAXy nejsou asynchronní - mají "false".
Já nemám problém s AJAXama ty mi fungují, tedy pokud zavolám vždy jen jeden z nich.
Ale když je volám funkcí, tedy tak aby byly provedeny ihned po sobě, tak ten druhý hází chybu a já nevím proč.
Mám v aplikaci tlačítka, která vrací stav pinu, Někdy chci logický stav (vrací ON/OFF), někdy chci napětí na pinu (vrací text např "13,3") a taky potřebuju variantu kdy mi vrátí obojí najednou.
Co se týče PHP, tak se obávám že to ten jednočip nepodporuje.
Ještě mě napadá otázka, jestli ten server je schopný zpracovat druhý AJAX, když právě vyřizuje ten první. No jo, ale jak to zjistit.
preca1
Profil
Zdravim,
volat dva AJAXy se mi zdá jako špatný přístup. Spíš bych volal jen jeden, který ti vrátí obě hodnoty.
Davex
Profil
Tomeco:
Jen ty MOJE AJAXy nejsou asynchronní - mají "false".
Tak to přiznávám chybu na mé straně.

Skript jsem zkoušel a funguje mi, takže chyba bude pravděpodobně mimo něj. Pravděpodobná příčina je v tom, že v okamžiku volání metody document.getElementById() neexistuje prvek s daným id.
Tomeco
Profil
preca1
Jo to mě sice napadlo, ale nevím jak to napsat, protože ve všech tutoriálech jsou jen jednoduché příklady.
Další zajímavý poznatek je, že tohle funguje:
var T1 = setInterval(function() {
    ajax_state("io?cPA0","td8");
    ajax_state("io?cPA1","td9");
    ajax_state("io?cPA2","td10");
    ajax_state("io?cPA3","td11");
}, 10000)

Takže není problém dva (čtyři) AJAXy za sebou, ale dva různé AJAXy za sebou.
Když jsem mezi ty čtyři vložil
    ajax_text("io?v1","td31");
 
tak už to zase nešlo.
Tomeco
Profil
Davex:
Ty pravdu máš chlape bídná !!!
Tak jest! Porušil jsem syntaxi a měl jsem v jednom tagu dvě ID.

Takhle je to špatně:
       <div class="CSSLight">
            <span id="td8" class="%! io?cPA0" id="td30">%! io?v0
            </span>
        </div>
A takto je to dobře:
       <div class="CSSLight">
            <span id="td8" class="%! io?cPA0"><span id="td30">%! io?v0 </span>
            </span>
        </div>
Teď už to lítá jak má!
HURÁ!!!
Děkuji! Děkuji! Děkuji!
jdu se vožrat...
_es
Profil
Tomeco:
AJAX není asynchronní
Myslíš, že to je dobrý nápad?: Využití proměné ve funkci (+ debata o sychronním AJAXu)

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:

Prosím používejte diakritiku a interpunkci.

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