Autor Zpráva
Majkelju
Profil
Tohle téma jsem tu už našel, ale kromě odpovědi, že to jde jedině AJAXem, jsem se ničeho užitečného nedopátral. Jak AJAX použít? Na této stránce: http://stackoverflow.com/questions/7165395/call-php-function-from-javascript je uveden příklad, ale zdá se mi to šíleně dlouhé, vypadá to, že je tam plno věcí navíc, nevím, co z toho je třeba použít... V mém případě jde jen o to, že ve formu na onsubmit volám JS funkci passValue(val, index). Ta má za úkol jen převzít hodnoty pro SQL dotaz...Jelikož ale do JS fce SQL nenarvu, potřebuju ty hodnoty předat dál do nějaké PHP funkce...Jde mi o nějaký jednoduchý příklad, ve kterém by bylo jen to nejnutnější pro předání těch proměnných, abych si to ujasnil a mohl pokračovat v práci. Předem díky...
user243
Profil
mně se líbí návod na citrónu;
Majkelju
Profil
user243:
Nějak z toho nejsem moudrý...v tom návodu jde o něco úplně jiného, než potřebuju :/ On tam nepracuje s žádnou PHP funkcí, vše má v JS...
aDAm
Profil
Jinak než ajaxem to nepůjde. Prostě musíš zavolat na pozadí server předat mu parametry a čekat na odpověď, tu pak následně zpracovat. Pokud používáš jQuery js plugin tak se to dá velice snadně:

$.ajax({
    url: "zpracuj.php",  // Url co zpracuje ten dotaz
    data: {
      val : val,
      index : index
    }  // Doplnkova data, u tebe treba ten val a index
    before: function() {
      // neco co se provede pred odeslanim
    },
    success: function(payload) {
      // a tady nejake zpracovani vysledku, data sou v promenne payload
    }
});

http://api.jquery.com/jQuery.ajax/
user243
Profil
přečti si tu stránku znovu a nahlas;
převzít hodnoty pro sql dotaz, jestli jde o to vzít nějaké value z inputů a neobnovovat stránku - tak ajax; a jak tomu říct, aby to poslalo ty hodnoty? třeba připojit je k url;
Majkelju
Profil
Hlavu jsem pěkně zavařil, ale nepřišel jsem na to. Nicméně napadlo mě jiné řešení - v té JS funkci jsem jednoduše zavolal $.get(); a do něj vepsal potřebné parametry...php skript v takto načteném souboru se vykoná v pořádku, jediné, co nechápu je, že po zavolání fce $.get(); musím zavolat alert();, jinak se skript neprovede...alert tam stejně nějaký být má, ale zajímalo by mě, čím by to mohlo být...
suvel
Profil
aDAm:
Jinak než ajaxem to nepůjde
Ale půjde - obyčejným javascriptem:
  var temp = new Image();
  temp.src = "novy_script.php?p="+promenna;
Nový php script se v pohodě provede a samozřejmě je možné mu předat proměnnou.
SeparateSK
Profil
Skúsil som spraviť script, ktorý by to dokázal a tu je výsledok.
JS:
<script>
    function UrlEncode(text){
        var ret="";
        var povolene_znaky="ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789"; //definovanie povolenych znakov v url
        var povolene=new Array(); //vytvorenie tabulky povolenych znakov
        for(var i=0;i<255;i++)
            povolene[i]=false;
        for(var i=0;i<povolene_znaky.length;i++)
            povolene[povolene_znaky[i].charCodeAt(0)]=true;
        var c='';
        for(var i=0;i<text.length,c=text.substr(i,1).charCodeAt(0);i++)
            if(!povolene[c])
                ret+="%"+(c.toString(16).toUpperCase());
            else
                ret+=text[i];
        return ret;
    }
    function ZavolajPHPFunkciu(meno){
        var args=arguments;
        var url="callfunc.php?func_name="+meno;
        var types=Array();
        types["number"]=0;
        types["string"]=1;
        types["boolean"]=2;
        for(var i=1;i<args.length-1;i++){
            url+="&param"+i+"="+UrlEncode((typeof args[i]=="string")?args[i]:args[i].toString(10))+"&type"+i+"="+types[typeof args[i]]; //zhotovenie url pre danu premennu
        }
        var callback=args[args.length-1];
        var x=0;
        (XMLHttpRequest)?x=new XMLHttpRequest():x=new ActiveXObject("Microsoft.XMLHTTP");
        x.onreadystatechange=function(){
            if(x.readyState==4&&x.status==200){
                var text=x.responseText;
                callback(text); //zavolanie callbacku
            }
        }
        x.open("GET",url,true);
        x.send();
    }
</script>
PHP (callfunc.php):
<?php
    if(isset($_GET["func_name"])){
        $params=array();
        $types=array(); 
        $types[0]="number";
        $types[1]="string";
        $types[2]="boolean";
        foreach($_GET as $i=>$v){
            if(substr($i,0,strlen("param"))=="param"){
                $at=intval(substr($i,strlen("param"))); //konvert stringu na cislo
                $type=$_GET["type$at"]; //zistenie typu, ktory bol pouzity v js pre dany parameter
                $param=$_GET[$i];
                if($types[intval($type)]=="boolean") //prevod stringu na bool, ak v js bol pouzity bool
                    if($param=="true")
                        $param=true;
                    else $param=false;
                elseif($types[intval($type)]=="number") //prevod stringu na cislo, ak v js bolo pouzite cislo
                    $param=intval($param);
                $params[$at-1]=$param;//vlozenie parametru do pola parametrov $params         
            }
        }
        $func=$_GET["func_name"];
        call_user_func_array($func,$params); //zavolanie funkcie $func s parametrami v array $params
    }
?>
Použitie:
ZavolajPHPFunkciu(meno,parametre...,callback);
Callback musí byť vždy posledný parameter a musí mať jeden parameter (výsledok php scriptu)
Príklad:
     ZavolajPHPFunkciu("printf","%s %d","String",128,function(out){document.write(out);}); //print nefunguje ani echo, ale mysql_query áno

Edit:
Pridal som rozlišovanie typov pre php. ?param1=123&type1=0 ; 0 = číslo, ?param1=123&type=1 ; 1 = reťazec znakov(string) + odstránil eval, ktorý nie je veľmi bezpečný. (ale cezeň aspoň fungoval print a echo)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0