Firebug-ban javascript sleep nem müködig

Firebug-ban javascript sleep nem müködig
2011-04-15T20:30:50+02:00
2011-04-17T00:49:21+02:00
2022-11-21T13:40:50+01:00
h4cwrz
Az a problémám hogy firebugban futtatom a scriptet és a sleep vagy a setTimeout is csak 1x fut le és van olyan is mikor a firebug hibát jelez. Nem tudom hogy a fireug hibája vagy én rontottam el valamit. És még lenne egy kérdésem, hogy a ad.php json választ ad és azt hogy tudom kezelni {"status":"ok", ... "eredmény":"23"..stb. ha astatusz ok akkor dobkon fel egy alert-el egy üzenetet hogy sikerült a számítás ("status":"ok")és le tudjam ellenőrizni, hogy jól adta össze sum=="eredmény":"23". Előre is köszönöm remélem érthető.

function sleep(){ var date = new Date(); var curDate = null; do { curDate = new Date(); } while(curDate-date < 3000); } function ad(){ var a=17; var b=12"; var sum=a+b; var message="a="+a+"&b="+b; var url="/ad.php"; if(window.XMLHttpRequest){ request=new XMLHttpRequest(); }else if(window.ActiveXObject){ request = new ActiveXObject("Microsoft.XMLHTTP"); } request.open("POST",url); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); request.send(message); } for(i=1;i<=10;i++){ ad(); //sleep(); //setTimeout("ad()", 10000); }
Mutasd a teljes hozzászólást!
A javascript engine egyszálú rendszer. Azaz ha te ülsz egy while ciklus belsejében 3 másodpercig, akkor semmi más (pl. eventek) nem fog működni. A firebug sem, más sem. Használj timeout-ot, hogy amíg nem akarsz semmit csinálni, addig a böngésző, meg a többi js dolgozhasson.

A json-t legegyszerűbben eval-lal dolgozhatod fel, de ebben nincs semmi biztonsági ellenőrzés, bármilyen javascript érkezik, az le fog futni.
var valasz = eval('(' + jsonStr + ')'); if (valasz.status == "ok") ...
Ha ez nem elég, akkor keress bármilyen js json parser-t.
Mutasd a teljes hozzászólást!

  • Hi

    Köszi a választ. Arra már rájöttem én is hogy javascript egyszálú rendszer sajnos. Az eval tökéletesen működik így oldottam meg:
    request.open("POST",url); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); request.send(message); request.onreadystatechange = function(){ if(request.readyState == 4){ if(request.responseText){ var valasz = eval('(' + request.responseText + ')'); if(valasz.status == "Ok"){

    De a timeout még mindig csak 1x fut le a ciklusban.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd