AJAX blijft fouten geven.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<script>
$(".ja_knop").click(function() {
$(".nee_knop").removeClass("nee_knop").addClass("weg").html("Tot ziens!");
var request = $.ajax({url: "feedback.php", type: "POST", data: { t : "<?php echo $p['title']; ?>", w : "1" }});
request.done(function( msg ) { $("#rechterbovenhoek i").html("Opgeslagen!");});
request.fail(function( jqXHR, textStatus ) { alert( "Request failed: " + textStatus);});
});
</script>
$(".ja_knop").click(function() {
$(".nee_knop").removeClass("nee_knop").addClass("weg").html("Tot ziens!");
var request = $.ajax({url: "feedback.php", type: "POST", data: { t : "<?php echo $p['title']; ?>", w : "1" }});
request.done(function( msg ) { $("#rechterbovenhoek i").html("Opgeslagen!");});
request.fail(function( jqXHR, textStatus ) { alert( "Request failed: " + textStatus);});
});
</script>
jQuery is geladen (1.8.3) en alle werkt goed, behalve dat ik steeds de alert "Request failed: error" krijg.
Het bestand feedback.php staat in dezelfde map (de root) als de html-pagina waarop deze code staat.
Die pagina werkt ook gewoon en geeft óf KLAAR óf FOUT terug. Maar ik krijg er niets van terug.
Ik heb al ../feedback.php en ./feedback.php en /feedback.php geprobeerd, maar zonder succes.
Als ik in feedback.php een sleep(5) zet, duurt het wel 5 seconden voordat ik van Javascript de alert krijg.... dus het bestand wordt daadwerkelijk gevonden/geopend en op gewacht.
Dit is feedback.php:
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
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
<?php
header("HTTP/1.1 200 OK");
if (isset($_POST['w'], $_POST['t'])) {
include ("includes/mysqli.php");
$t = escape($_POST['t']);
$w = intval($_POST['w']);
$query = "
INSERT INTO feedback
(
pagina,
datumtijd,
waardering
)
VALUES
(
'" . $t . "',
NOW(),
'" . $w . "'
)";
sql($query);
echo 'Klaar!';
} else {
echo 'Fout';
}
?>
header("HTTP/1.1 200 OK");
if (isset($_POST['w'], $_POST['t'])) {
include ("includes/mysqli.php");
$t = escape($_POST['t']);
$w = intval($_POST['w']);
$query = "
INSERT INTO feedback
(
pagina,
datumtijd,
waardering
)
VALUES
(
'" . $t . "',
NOW(),
'" . $w . "'
)";
sql($query);
echo 'Klaar!';
} else {
echo 'Fout';
}
?>
Gewijzigd op 12/10/2013 13:27:44 door Eddy E
Roep de php ajax pagina eens direct in de browser aan (en vervang dan even de post gegevens in het script met hardcoded waardes). Wat zie je dan als output?
Dat heb ik uiteraard eerst volledig getest.
Zie www.zunflappie.nl/feedback.php
Quote:
Die pagina werkt ook gewoon en geeft óf KLAAR óf FOUT terug. Maar ik krijg er niets van terug.
Wat gebeurt er als je de header weglaat? De juiste header wordt vanzelf meegestuurd.
Gaat het over dat stukje "heeft u gevonden wat u zocht?" dat omhoog komt rechts in de bovenhoek?
Alles doet precies wat het moet doen, behalve dat er niets wordt opgeslagen (en dat alles dus geen nut heeft) :P
Ger van Steenderen op 12/10/2013 16:45:25:
Wat gebeurt er als je de header weglaat? De juiste header wordt vanzelf meegestuurd.
Heb je daar al naar gekeken?
Want als ik naar je pagina ga en op de 'JA' of 'NEE' knop klik dan zie ik dat de ajax call gewoon wordt uigevoerd, dat het resultaat dat terug komt correct is en dat er iets op de pagina gebeurt. Dus het probleem zit aan de server kant?
Lees dit eens door: http://wouterj.github.io/sql-boilerplate/
Gewijzigd op 12/10/2013 19:44:55 door Alex Mester
De query is goed en werkt.
@Ger: header() weggehaald, geen effect.
@Erwin: ik zie helemaal geen resultaat terug komen. Ik zie alleen maar "Error", dus het stuk van jQuery van .fail().
De server-kant zit goed. Ik heb nu (tijdelijk) even $_POST['w'] en $_POST['t'] bovenaan ingevuld en het werkt direct wel goed (de PHP-pagina dus). Zelfs dan krijg ik via de AJAX een 'error' terug.
Inmiddels is dit de php-pagina:
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
34
35
36
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
34
35
36
<?php
$_POST['w'] = 1;
$_POST['t'] = "test";
if (isset($_POST['w'], $_POST['t'])) {
include ("includes/mysqli.php");
$t = escape($_POST['t']);
$w = intval($_POST['w']);
$query = "
INSERT INTO feedback
(
pagina,
datumtijd,
waardering
)
VALUES
(
'" . $t . "',
NOW(),
'" . $w . "'
)";
if(sql($query) == true)
{
echo 'Klaar!';
}
else
{
echo 'Fout in SQL';
}
} else {
echo 'Geen waarden ontvangen.';
}
?>
$_POST['w'] = 1;
$_POST['t'] = "test";
if (isset($_POST['w'], $_POST['t'])) {
include ("includes/mysqli.php");
$t = escape($_POST['t']);
$w = intval($_POST['w']);
$query = "
INSERT INTO feedback
(
pagina,
datumtijd,
waardering
)
VALUES
(
'" . $t . "',
NOW(),
'" . $w . "'
)";
if(sql($query) == true)
{
echo 'Klaar!';
}
else
{
echo 'Fout in SQL';
}
} else {
echo 'Geen waarden ontvangen.';
}
?>
Het javascript is online te zien op www.zunflappie.nl
Je 'activeert' het scherm door je muis naar rechtsboven (richting kruisje ;) ) te bewegen.
Gewijzigd op 13/10/2013 11:55:13 door Eddy E
Bij mij (IE10) komt netjes Opgeslagen! te staan.
Bij mij ook.
Maar dat doet hij dus niet.
Ik wil het, zoals Twitter ook doet: eerst zeggen dat het is opgeslagen, en daarna (ondertussen) het echte opslaan.
Lukt het dan niet... dan gooi ik wel een grotere melding (hoewel dat de bezoekers ook niets boeit).
Let goed op de alert die je krijgt.
Eddy E op 13/10/2013 11:53:52:
@Erwin: ik zie helemaal geen resultaat terug komen. Ik zie alleen maar "Error", dus het stuk van jQuery van .fail().
De server-kant zit goed. Ik heb nu (tijdelijk) even $_POST['w'] en $_POST['t'] bovenaan ingevuld en het werkt direct wel goed (de PHP-pagina dus). Zelfs dan krijg ik via de AJAX een 'error' terug.
De server-kant zit goed. Ik heb nu (tijdelijk) even $_POST['w'] en $_POST['t'] bovenaan ingevuld en het werkt direct wel goed (de PHP-pagina dus). Zelfs dan krijg ik via de AJAX een 'error' terug.
Misschien begrijp ik je nog steeds niet, maar ik krijg van de server als resultaat van de ajax call 'Klaar!' terug. Geen error. Dat is toch wat je wil?
Is dit mijn browsers fout?
In FF werkt het volgens mij.
In Chrome krijg ik ook "Klaar" terug
In Opera krijg ik nog steeds 'error' terug.
En bij jullie gaat het wel goed? Vaaaag...