PHP en AJAX wat is hier fout aan? Weet niet of dit in PHP of JS thuishoord
Ik werk aan een blogpost pagina, met bovenaan het originele artikel, daaronder de reacties, en helemaal onderaan een reactie formulier. Om de pagina niet te hoeven te verversen probeer ik AJAX te integreren. Dit is het AJAXgedeelte
In de functie responses heb ik het volgende:
En in de query het volgende:
Ik blij echter de foutmelding krijgen dat data.respons undefined is. Zit nu al een uur te staren maar zie niet waar ik er naast zit. en paar extra ogen zouden nu welkom zijn.
Alvast bedankt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$(function() {
var lastChecked = '';
function addResp(type, resp) {
$("#post-reponses").append(
"<div class='resp "+ type +"'>"+ resp +"</div>"
);
};
function waitForResp() {
$.ajax({
type: "GET",
url: "/responses?since="+lastChecked,
async: true,
cache: false,
timeout:5000,
success: function(data) {
if (data.respons.length > 0) {
lastChecked = data.lastChecked;
data.respons.forEach(function(item) {
addResp("respons", item.name);
});
}
setTimeout(
waitForResp,
1000
);
}
})
};
waitForResp();
});
var lastChecked = '';
function addResp(type, resp) {
$("#post-reponses").append(
"<div class='resp "+ type +"'>"+ resp +"</div>"
);
};
function waitForResp() {
$.ajax({
type: "GET",
url: "/responses?since="+lastChecked,
async: true,
cache: false,
timeout:5000,
success: function(data) {
if (data.respons.length > 0) {
lastChecked = data.lastChecked;
data.respons.forEach(function(item) {
addResp("respons", item.name);
});
}
setTimeout(
waitForResp,
1000
);
}
})
};
waitForResp();
});
In de functie responses heb ik het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function responsesAction()
{
if (empty($_GET['since']))
{
$responses = $this->blog->get_responses();
}
else
{
$responses = $this->blog->get_responses($_GET['since']);
}
$data = $responses;
header('Content-Type: application/json');
echo json_encode(array(
'respons' => $data,
'lastChecked' => time()
));
}
{
if (empty($_GET['since']))
{
$responses = $this->blog->get_responses();
}
else
{
$responses = $this->blog->get_responses($_GET['since']);
}
$data = $responses;
header('Content-Type: application/json');
echo json_encode(array(
'respons' => $data,
'lastChecked' => time()
));
}
En in de query het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function get_responces($response_date)
{
$sql = "SELECT *
FROM `post_responses`";
$params = array();
if ($response_date)
{
$sql .= " WHERE `response_date` > :response_date";
$params[':response_date'] = $response_date;
}
$stmt = $this->pdo->prepare($sql . " ORDER BY `post_id` DESC");
$stmt->execute($params);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
{
$sql = "SELECT *
FROM `post_responses`";
$params = array();
if ($response_date)
{
$sql .= " WHERE `response_date` > :response_date";
$params[':response_date'] = $response_date;
}
$stmt = $this->pdo->prepare($sql . " ORDER BY `post_id` DESC");
$stmt->execute($params);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
Ik blij echter de foutmelding krijgen dat data.respons undefined is. Zit nu al een uur te staren maar zie niet waar ik er naast zit. en paar extra ogen zouden nu welkom zijn.
Alvast bedankt
Gewijzigd op 07/06/2018 12:03:57 door - Ariën -
Wat gebeurt er als je de URL die je gebruikt direct oproept in de browser?
Gooi data eens door een alert in je JavaScript. Wat geeft dit terug?
@Ben van Velzen en @ - Ariën - Het lijkt er sterk op dat de fout in de controller zit:
Met het gebruik van een alert (zoals - Ariën -) voorsteld krijg ik namelijk de melding
<b>Fatal error</b>: Uncaught ArgumentCountError: Too few arguments to function Model_Blog::get_responces()
Dus er is iets fout in de opbouw van de query ofwel de manier hoe ik deze in de Controller verwerk
Toevoeging op 07/06/2018 12:27:53:
Ik zie alleen niet wat
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function responsesAction()
{
if (empty($_GET['since']))
{
$responses = $this->blog->get_responces();
}
else
{
$responses = $this->blog->get_responces($_GET['since']);
}
$data = $responses;
header('Content-Type: application/json');
echo json_encode(array(
'respons' => $data,
'lastChecked' => time()
));
}
{
if (empty($_GET['since']))
{
$responses = $this->blog->get_responces();
}
else
{
$responses = $this->blog->get_responces($_GET['since']);
}
$data = $responses;
header('Content-Type: application/json');
echo json_encode(array(
'respons' => $data,
'lastChecked' => time()
));
}
Met het gebruik van een alert (zoals - Ariën -) voorsteld krijg ik namelijk de melding
<b>Fatal error</b>: Uncaught ArgumentCountError: Too few arguments to function Model_Blog::get_responces()
Dus er is iets fout in de opbouw van de query ofwel de manier hoe ik deze in de Controller verwerk
Toevoeging op 07/06/2018 12:27:53:
Ik zie alleen niet wat
Gewijzigd op 07/06/2018 12:26:43 door Donald Boers
Nee, de fout is dat je niet genoeg argumenten meegeeft, maar gebeurt dat alleen wanneer je geen since hebt?
Maak er
van zodat dit een optioneel argument wordt wat niet per se meegegeven hoeft te worden?
van zodat dit een optioneel argument wordt wat niet per se meegegeven hoeft te worden?
@Thomas van den Heuvel. Helemaal top Thomas. Dat heeft idd die fout weggenomen en de berichten worden geladen. Ik heb nu echter een ander probleem. Maar ik weet niet zo goed of dat hier thuishoort want het is duidelijk JS/AJAX gerelateerd. k vertel toch maar even wat het probleem is: Met jou hulp worden inderdaad de aanwezige reacties getoond, alleen blijft de functie zich herhalen dus het word een hele lange lijst met steeds dezelfde reacties. Dus er zit een fout in de AJAX functie
Toevoeging op 07/06/2018 19:18:51:
Ik heb dit inmiddels opgelost. In plaats van de if statement en de setTimeout function apart te hebben heb ik er nu een if/else statement van gemaakt:
Toevoeging op 07/06/2018 19:18:51:
Ik heb dit inmiddels opgelost. In plaats van de if statement en de setTimeout function apart te hebben heb ik er nu een if/else statement van gemaakt:
Gooi eens een $("#post-reponses").empty(); voor de forEach. Ik vind het overigens grappig dat het op de ene plek een respons is, de andere een reponse en nog weer op een andere plek een responce. Het is response.
*Dom van mijn kant*
Gewijzigd op 08/06/2018 12:41:37 door Jacco Engel




