Symfony2 AJAX request doet raar
Ik heb een probleem. Ik probeer een ajax request te maken die JSON retourneerd. Nu werkt dit allemaal alleen het rare is dat ik de juiste gegevens terugkrijg (en deze ook gewoon in een <div> kan appenden) alleen krijg ik een 'download' verzoek of ik het JSON bestand wil downloaden (het downloadvraagje onderin de browser 'wilt u x4343.json openen of opslaan? Ik weet niet of dit aan mijn symfony instellingen lig of dat ik iets anders fout doe. De gegevens die ik terug zijn zijn de correcte:
Formulier(tje)
Code (php)
1
2
3
4
2
3
4
<form id="nameForm" action="{{path('zoeknamen')}}" method="post">
<input class="form-control" id="naam" name="naam" type="text">
<input type="submit" class="btn btn-default" value="Zoeken">
</form>
<input class="form-control" id="naam" name="naam" type="text">
<input type="submit" class="btn btn-default" value="Zoeken">
</form>
Javascript code
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
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
$("#nameForm").submit(function(){
var verzoekString = $("#nameForm").serialize();
var url = $("#nameForm").attr("action");
$.ajax(
{
type: "POST",
url: url,
dataType: "json",
data: verzoekString,
success: function(data)
{
$("#legeDiv").empty();
var gegevens = data;
if(gegevens[0]['status'] != "geen resultaat")
{
for(var a = 1; a < gegevens.length; a++)
{
$("#legeDiv").append(gegevens[a]['naam']+"<br>");
}
}
else
{
alert('geen results');
}
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('jqxhr: '+jqXHR);
alert('textStatus: '+textStatus);
alert('errorThrown: '+errorThrown);
}
});
});
var verzoekString = $("#nameForm").serialize();
var url = $("#nameForm").attr("action");
$.ajax(
{
type: "POST",
url: url,
dataType: "json",
data: verzoekString,
success: function(data)
{
$("#legeDiv").empty();
var gegevens = data;
if(gegevens[0]['status'] != "geen resultaat")
{
for(var a = 1; a < gegevens.length; a++)
{
$("#legeDiv").append(gegevens[a]['naam']+"<br>");
}
}
else
{
alert('geen results');
}
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('jqxhr: '+jqXHR);
alert('textStatus: '+textStatus);
alert('errorThrown: '+errorThrown);
}
});
});
Routing.yml (gedeelte)
Code (php)
1
2
3
4
5
6
2
3
4
5
6
#Haalt de namen op
zoeknamen:
path: /test/zoeknamen
defaults: {_controller: AppBundle:Lookup:zoekNamen}
requirements:
_method: POST
zoeknamen:
path: /test/zoeknamen
defaults: {_controller: AppBundle:Lookup:zoekNamen}
requirements:
_method: POST
Stukje code in controller
Code (php)
1
2
3
4
2
3
4
//Alles wordt goed opgehaald dus ik denk dat misschien met de response te maken heeft:
$response = new JsonResponse($namen);
$response->headers->set('Content-Type',200, 'application/json');
return $response;
$response = new JsonResponse($namen);
$response->headers->set('Content-Type',200, 'application/json');
return $response;
Dus het hele request gebeuren gaat goed alleen het 'downloadscherm' kan ik ff niet uitkomen. Weet iemand hier iets vanaf of kan me de juiste richting opsturen?
Bedankt!
--edit code tags aangepast --
Gewijzigd op 22/04/2015 10:47:10 door Ama saril
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/JsonResponse.php
Wat gebeurt er dus als je regel 3 weglaat van het stukje code in je controller?
Ik heb het even geprobeerd maar ik krijg nog steeds het downloadschermpje te zien
Misschien ligt het aan de browser. Ik kan me herinneren dan IE8 bijvoorbeeld wel eens moeilijk deed bij een JSON request. De oplossing was toen om de MIME aan te passen naar 'text/plain' i.p.v. van 'application/json'.
Dat zou je eens kunnen proberen.
Ik heb het gevoel dat het ergens in de routing niet goed gaat omdat ie probeert naar een andere pagina te gaan (door routing.yml). Misschien moet ik iets als een service aanmaken maar moet ff uitvogelen of zoiets bestaat en hoe :)
Die regel mag er in zijn geheel uit.
Tip: probeer het eens met een GET request en surf dan eens met de browser naar .../test/zoeknamen?...
Als het goed werkt moet je netjes een JSON string te zien krijgen in je browser.
Als ik het met een get request doe komt inderdaad de json string in de browser te staan. Tevens wordt ik doorgerouteerd naar test/zoeknamen. Ik heb dus echt het vermoeden dat het door het routing.yml niet helemaal goed gaat en ik het als een service moet definieren (zodat ik niet doorgerouteerd wordt). Ben nu bezig met de handleiding hiervan aan het doorspitten. Als ik dit heb getest laat ik hier wel weten of het goed gaat of niet :).
Tot zover bedankt in ieder geval.
Ama saril op 23/04/2015 15:04:18:
Tevens wordt ik doorgerouteerd naar test/zoeknamen.
Huh? Je krijgt netjes de JSON te zien maar daarna wordt je automatisch doorgestuurd?
Geen idee wat je precies doet maar klinkt me echt vreemd in de oren :-)
Wat ik wel weet is dat de volgorde van van de routes belangrijk kan zijn maar dan moet je nog niet doorgestuurd worden..
Ik vindt het ook heel raar allemaal. Heb wel vaker ajax requests gedaan en dit is nog nooit voorgekomen, vandaar dat ik het maar hier heb gepost :)
Het kwam erop neer dat het form echt 'gesubmit' werd waardoor routing.yml hem probeerde door te retouren.
Heb hem opgelost door de prefentDefault() functie te plaatsen voor mijn ajaxaanroep.
Wist dat het in de javascript zat????
Wist je dat wel of wist je het niet :P?
Ama saril op 12/05/2015 16:31:53:
Wist je dat wel of wist je het niet :P?
Nou ja ik vermoede het. Het routing systeem van Symfony is best degelijk dus daar zou ik het niet in zoeken.