PHP en AJAX wat is hier fout aan? Weet niet of dit in PHP of JS thuishoord
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?
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?
van zodat dit een optioneel argument wordt wat niet per se meegegeven hoeft te worden?
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.
Gewijzigd op 08/06/2018 12:41:37 door Jacco Engel