PHP functie aanroepen d.m.v. AJAX

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johhny Westra

Johhny Westra

05/06/2014 16:24:35
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
function checkIfAllowedKostenplaats(){
    try{
        var afdeling = document.getElementById('afdeling').value;      
        getHoofdAfdeling(afdeling);

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


File: ajax.js

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    echo getAfdelingshoofd($action);
}
        
     function getAfdelingshoofd($iAfdelingId)
{
           return "gevoelige info"
        }
Gewijzigd op 05/06/2014 16:25:21 door Johhny Westra
 
PHP hulp

PHP hulp

15/05/2024 02:54:22
 
Erwin H

Erwin H

05/06/2014 16:52:49
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$.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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var afdeling = document.getElementById('afdeling').value;      
getHoofdAfdeling(afdeling);

return true;

Die return zal al worden gegeven voor je request door de server is afgehandeld.
 
Johhny Westra

Johhny Westra

05/06/2014 17:11:17
Quote Anchor link
Hoi Erwin,

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

Heb het volgende veranderd:

file: ajax.js

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
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?
 
Erwin H

Erwin H

05/06/2014 17:26:26
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
alert(getHoofdAfdeling(afdeling));

Als de call heel lang duurt kan je je browser niet meer gebruiken. Handel het gewoon in de callbacks af.
Gewijzigd op 05/06/2014 17:29:03 door Erwin H
 
Johhny Westra

Johhny Westra

06/06/2014 08:50:51
Quote Anchor link
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?

Toevoeging op 06/06/2014 09:44:44:

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}
Gewijzigd op 06/06/2014 08:51:26 door Johhny Westra
 
Pipo Clown

Pipo Clown

06/06/2014 09:53:28
Quote Anchor link
In dat geval krijg ik het zeer sterke vermoeden dat jquery niet geactiveerd is terwijl je het wel probeert te gebruiken.
 
Johhny Westra

Johhny Westra

06/06/2014 09:54:14
Quote Anchor link
Oh god.. Geen jQuery library toegevoegd... Het antwoord is soms heel simpel...

Toevoeging op 06/06/2014 09:54:46:

Ja klopt Pipo! Bedankt voor je reactie :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.