PHP functie aanroepen d.m.v. AJAX
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)
1
2
3
4
5
6
7
8
9
10
11
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;
}
}
try{
var afdeling = document.getElementById('afdeling').value;
getHoofdAfdeling(afdeling);
return true;
} catch (err){
alert(err);
return false;
}
}
File: ajax.js
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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');
}
}
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)
1
2
3
4
5
6
7
8
9
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"
}
$action = $_POST['action'];
echo getAfdelingshoofd($action);
}
function getAfdelingshoofd($iAfdelingId)
{
return "gevoelige info"
}
Gewijzigd op 05/06/2014 16:25:21 door Johhny Westra
Dit kan dus simpelweg niet:
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)
1
2
3
4
2
3
4
var afdeling = document.getElementById('afdeling').value;
getHoofdAfdeling(afdeling);
return true;
getHoofdAfdeling(afdeling);
return true;
Die return zal al worden gegeven voor je request door de server is afgehandeld.
Ten eerste hartstikke bedankt voor je reactie en de tijd die je daarvoor genomen hebt.
Heb het volgende veranderd:
file: ajax.js
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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');
}
}
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)
1
2
3
4
5
6
7
8
9
10
11
12
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;
}
}
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?
En dit is geen handige optie, zelfs niet met async op false:
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
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
In dat geval krijg ik het zeer sterke vermoeden dat jquery niet geactiveerd is terwijl je het wel probeert te gebruiken.
Toevoeging op 06/06/2014 09:54:46:
Ja klopt Pipo! Bedankt voor je reactie :-)