Hallo allemaal,

Ik wil graag een PHP functie aanroepen vanuit een JavaScript file maar dit gaat niet helemaal goed. Mijn code ziet er als volgt uit. Ik begrijp dat de er geen logica op dit moment in de code zit maar dat komt omdat ik nog niet klaar ben met de functies en omdat ik liever geen gevoelige info wil vrijgeven.

Kan iemand mij helpen? Hij komt nu telkens in de catch en alert "AJAX FOUT".

File: functies.js


function checkIfAllowedKostenplaats(){
    try{
        var afdeling = document.getElementById('afdeling').value;      
        getHoofdAfdeling(afdeling);

        return true;
    } catch (err){
        alert(err);
        return false;
    }
}


File: ajax.js


function getHoofdAfdeling(afdeling){
    try{
        $.ajax({ url: 'D:/goede/url/gevoelige/informatie.inc',
         data: {action : afdeling},
         type: 'post',
         success: function(output) {
                      alert(output);
                  }
        });
    }catch(err){
        alert('AJAX FOUT');
    }
}


Php file: informatie.inc


if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    echo getAfdelingshoofd($action);
}
        
     function getAfdelingshoofd($iAfdelingId)
{
           return "gevoelige info"
        }
Een ajax request naar een server is net als een pagina request. Het wordt afgehandeld door een webserver. Als jij dus een pad opgeeft en geen url, dan gaat het nooit werken, omdat je webserver er niet tussen zit.
Dit kan dus simpelweg niet:

$.ajax({ url: 'D:/goede/url/gevoelige/informatie.inc'


Daarnaast moet je je ook bedenken dat AJAX asynchroon is. De rest van je javascript code wordt dus gewoon uitgevoerd terwijl de server je request behandelt. En daarmee doel ik hierop:

var afdeling = document.getElementById('afdeling').value;      
getHoofdAfdeling(afdeling);

return true;

Die return zal al worden gegeven voor je request door de server is afgehandeld.
Hoi Erwin,

Ten eerste hartstikke bedankt voor je reactie en de tijd die je daarvoor genomen hebt.

Heb het volgende veranderd:

file: ajax.js


function getHoofdAfdeling(afdeling){
    try{
         return $.ajax({ url: 'http://domeinnaam/map1/map2/informatie.inc',
         data: {action : afdeling},
         type: 'post',
         async: false
     }).responseText;
    }catch(err){
        alert('AJAX FOUT');
    }
}


file: functies.js


function checkIfAllowedKostenplaats(){
    try{
        var afdeling = document.getElementById('afdeling').value;
        
        alert(getHoofdAfdeling(afdeling));
        
        return true;
    } catch (err){
        alert(err);
        return false;
    }
}


Php file is hetzelfde gebleven. Helaas catched hij hem nog steeds bij het uitvoeren van het AJAX script dus wordt er "AJAX FOUT" weergegeven. Nog andere suggesties?
Wat krijg je als je direct de url in de browser aanroept? Krijg je dan wel de vewachte output te zien?

En dit is geen handige optie, zelfs niet met async op false:

alert(getHoofdAfdeling(afdeling));

Als de call heel lang duurt kan je je browser niet meer gebruiken. Handel het gewoon in de callbacks af.
Wanneer ik de URL direct aanroep in de browser krijg ik een 404.. Zelfs wanneer ik via de browser map voor map er naar toe navigeer.. Kan het iets te maken hebben met dat het een .inc file is?

[size=xsmall]Toevoeging op 06/06/2014 09:44:44:[/size]

Heb de catch aangepast zodat we wat nuttige info terug krijgen over wat er fout gaat. Ik print de Error uit met de console van mijn browser en die geeft het volgende terug:

[object Error]{
description: "$ is niet gedefinieerd",
message: "$ is niet gedefinieerd",
name: "TypeError",
number: -2146823279}
In dat geval krijg ik het zeer sterke vermoeden dat jquery niet geactiveerd is terwijl je het wel probeert te gebruiken.
Oh god.. Geen jQuery library toegevoegd... Het antwoord is soms heel simpel...

[size=xsmall]Toevoeging op 06/06/2014 09:54:46:[/size]

Ja klopt Pipo! Bedankt voor je reactie :-)

Reageren