ugrás a tartalomhoz

PHP-ben egy eseményre több javascript függvény hívása

ha5abe · 2008. Feb. 16. (Szo), 21.33
Sziasztok! Pl. OnFocus eseményre szeretnék több javascript függvényt felsorolni PHP-ben.

....
OnFocus=\"func1('parameterek', 'POS');
          func2('parameterek', 'GET');
          func3('parameterek', 'GET');\"
....


Ezek a függvények további bonyolúltabb PHP kódokat hívnak POS vagy GET.
Szépen le is futnak sorjában Firefox alatt, ha me van kapcsolva a firebug.
Ha ki van kapcsolva, csak az első függvényt hajtja végre. Explorerben is csak az elsőt.
Ha közéjük teszek alert(1) stb... tehát így:

....

OnFocus=\"func1('parameterek', 'POS');alert(1);
          func2('parameterek', 'GET');alert(2);
          func3('parameterek', 'GET');\"
....


Akkor minden böngészőben végrehajtja az összes függvényt, firebug bekapcsolás nélül is.
Esetleg valami várakoztató függvényt kell az alert() helyére írni?
Mi ennek a normális megoldása, vagy szintaktikája?
 
1

Bővebben

vbence · 2008. Feb. 16. (Szo), 22.11
Blokkoló XHR-t használsz? Mert ahogy nézem azt szeretnél.
2

valasz

ha5abe · 2008. Feb. 17. (V), 08.41
Igen. Amúgy a js függvényeim PHP kódokat hívnak, azok SQL lekérdezéseket követően visszaírnak echo-val a képernyő egy-egy name= és id= -vel elnevezett részire. (A példában elírtam. Nem POS, hanem POST.)
Ha csak GET-ek vannak a sorozatban (amúgy nekem 9 db. van) akkor is csak az elsőt hajtja végre kikapcsolt firebug-nál.
Ilyen egy függvényem: abeRequest('parameterek','valami.php','GET','id_neve');
Az OnChange, OnKeyUp és OnFocus-ra is felsoroltam vagy 9-et.
3

XHR

vbence · 2008. Feb. 17. (V), 10.13
Tehát request.open(method, url, false); van az "ajax" hívásnál.
4

valasz

ha5abe · 2008. Feb. 17. (V), 10.39
Ez az első AJAX-os programom, szóval még kezdő vagyok ebben.

var http_request = false;
var formErrors = new Array();

function makeRequest() {
    http_request = false;
    if(window.XMLHttpRequest){
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
        catch (err)
            {
            try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch (err) {}
            }
    }
    if (!http_request) {
        alert('Nincs AJAX!');
    }
    return http_request;
}

var http = makeRequest();

function abeRequest(data, page, method, keret) {
    var content = document.getElementById(keret);
    makeRequest();
     
    if(method == "GET") {
        if(data == 'null') {
            http.open("GET", page);
        } else {
            http.open("GET", page+"?"+data);
        }
    } else if(method == "POST") {
        http.open("POST", page);
    }
    http.onreadystatechange = function() {
        if (http.readyState < 4){
        } else {
            content.innerHTML = http.responseText;
        }
    }
    if(method == "GET") {
        http.send('&nbsp;');
    } else if (method == "POST") {
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        http.send(data);
    }
}
5

Tehát NEM

vbence · 2008. Feb. 17. (V), 11.38
Akkor próbáldd ki amit írtam, azaz az open metódus harmadik paramétereként adj át egy false-t. Ez ugebár blokkolni fogja a szkript futását addig, amíg a válasz vissza nem érezik, és vélhetően az fog történni, amit szeretnél.

(Viszont jelentkezni fog egy új probléma... no de ennyire ne szaladjunk előre.)
6

valasz

ha5abe · 2008. Feb. 17. (V), 11.58
Mindhárom http.open helyre beírtam. Van változás, de még mindíj nem lett jó. Erre gondoltál? http.open("GET", page, false);

Közben kifiléztem egy részt. Ezzel ki is próbálhatod, működik is, csak az eredeti helyén nem. Most keresgélem a különbséget....Nagyon köszönöm, hogy eddig is segítettél!

Az végleges kódban sok minden dolga van, tehát a Torol.php-be beletettem egy véletlengenerátoros várakozást.

Ha ezt a két filet létrehozod és elindítod a Proba.php-t, futnia kellene.

Amit nem értek, hogy miért csak a végén írja ki egyszerre és nem szépen sorba-sorba, ahogyan a várakorási idők letelnek. Valahogy az az érzésem, hogy a kordé megelőzi a szamarat.

Proba.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang="hu">
<HEAD> <TITLE>Proba</TITLE> </HEAD>
<title>Proba</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
<meta name="keywords" content="proba">
<meta name="author" lang="hu" content="ha5abe at http://www.proba.hu">
<meta name="robots" content="index, follow">
<meta name="identifier-url" content="http://www.proba.hu/index.php">
<meta name="revisit-after" content="30 days">
<meta name="description" content="oktato oldal">
<script type="text/javascript">

var http_request = false;
var formErrors = new Array();

function makeRequest() {
    http_request = false;
    if(window.XMLHttpRequest){
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
        catch (err)
            {
            try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch (err) {}
            }
    }
    if (!http_request) {
        alert('Nincs AJAX!');
    }
    return http_request;
}

var http = makeRequest();

function abeRequest(data, page, method, keret, vido) {
    //alert ("<data:>"+data+"<page:>"+ page+"<method:>"+method+"<keret:>"+keret+"<vido:>"+vido+"<>");
    var content = document.getElementById(keret);
   
    makeRequest();   // beindult az IE es a Mozilla is
   
    if(method == "GET") {
        if(data == 'null') {
            http.open("GET", page, false);
        } else {
            http.open("GET", page+"?"+data, false);
        }
    } else if(method == "POST") {
        http.open("POST", page, false);
    }
    http.onreadystatechange = function() {
    if (http.readyState < 4){
        } else {
            content.innerHTML = http.responseText;
        }
    }
    if(method == "GET") {
        //http.send(null);
        try {
            http.send('&nbsp;');
            }
        catch (err) {}
    } else if (method == "POST") {
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        http.send(data);
    }
}

</script>
</head>
<body>
<?php

echo "<table width=\"509\" border=\"0\">
    <tr>
        <td>Proba</td>
    </tr>
    <tr>
        <td>
            <form id=\"form1\" name=\"form1\">";
                echo "<input type=\"button\" name=\"gomb\" id=\"gomb\" value=\"OK\"
                        onClick=\"abeRequest('torles','Torol.php', 'GET','szoveg1');
                                abeRequest('torles','Torol.php', 'GET','szoveg2');
                                abeRequest('torles','Torol.php', 'GET','szoveg3');
                                abeRequest('torles','Torol.php', 'GET','szoveg4');
                                abeRequest('torles','Torol.php', 'GET','szoveg5');
                                abeRequest('torles','Torol.php', 'GET','szoveg6');
                                abeRequest('torles','Torol.php', 'GET','szoveg7');
                                abeRequest('torles','Torol.php', 'GET','szoveg8');
                                abeRequest('torles','Torol.php', 'GET','szoveg9');
                                abeRequest('torles','Torol.php', 'GET','szoveg10');
                                abeRequest('torles','Torol.php', 'GET','szoveg11');
                                abeRequest('torles','Torol.php', 'GET','szoveg12');\">";

                echo "<table border='1'>";
                echo "<tr><td name='szoveg1' id='szoveg1'>----1-----</td></tr>";
                echo "<tr><td name='szoveg2' id='szoveg2'>----2-----</td></tr>";
                echo "<tr><td name='szoveg3' id='szoveg3'>----3-----</td></tr>";
                echo "<tr><td name='szoveg4' id='szoveg4'>----4-----</td></tr>";
                echo "<tr><td name='szoveg5' id='szoveg5'>----5-----</td></tr>";
                echo "<tr><td name='szoveg6' id='szoveg6'>----6-----</td></tr>";
                echo "<tr><td name='szoveg7' id='szoveg7'>----7-----</td></tr>";
                echo "<tr><td name='szoveg8' id='szoveg8'>----8-----</td></tr>";
                echo "<tr><td name='szoveg9' id='szoveg9'>----9-----</td></tr>";
                echo "<tr><td name='szoveg10' id='szoveg10'>----10----</td></tr>";
                echo "<tr><td name='szoveg11' id='szoveg11'>----11----</td></tr>";
                echo "<tr><td name='szoveg12' id='szoveg12'>----12----</td></tr>";
               
echo        "</form>
        </td>
    </tr>
    </table>";
?>

</body>
</html>


Torol.php

header("Cache-control: No-Cache");
header("Pragma: No-Cache");
header("Expires: Fri, 30 Oct 1998 10:10:10 GMT");

if(isset($_GET['torles'])){
    //echo "&nbsp;";
    $n = rand(0, 10)*100000;
    usleep($n);
    echo "------" . $n . "------";
}