Comment faire une requête POST Ajax avec Symfony et Jquery
J'ai besoin de stocker de la carte paramètre de mon projet symfony, pour ce faire j'ai besoin de mettre en œuvre certaines Ajax, à mon avis, qui sera en mesure de passer un peu d'info pour le contrôleur.
J'ai lu les docs, essayer d'écrire un peu de code, mais je ne peux pas faire cela fonctionne. Et Ajax est vraiment pénible à déboguer.
Ici, c'est le contrôleur de la partie :
/**
* @Route("/ajax", name="_recherche_ajax")
*/
public function ajaxAction()
{
$isAjax = $this->get('Request')->isXMLHttpRequest();
if ($isAjax) {
return new Response('This is ajax response');
}
return new Response('This is not ajax!', 400);
}
Et le JS :
map.on('zoomend', function(e) {
//use callback e variable
console.log('zoom: ' + e.target.getZoom());
$.ajax({
type: "POST",
url: "/recherche/ajax",
data: {
zoom: e.target.getZoom()
},
dataType: "json",
success: function(response) {
console.log(response);
}
});
});
- Je vérifier l'url recherche/ajax
il n'existe pas et le retour de la 'Ce n'est pas Ajax comme prévu. Mais la console.le journal ne retourne aucune valeur...
Est que la bonne façon de le faire ?
EDIT :
On dirait que le contrôleur ne peut pas traiter la Requête POST. J'ai essayé de modifier les annotations :
/**
* @Route("/ajax", name="_recherche_ajax")
* @Method({"GET", "POST"})
*/
Mais il retourne :
([Semantical Error] The annotation "@Method" in method MySite\SiteBundle\Controller\RechercheController::ajaxAction() was never imported. Did you maybe forget to add a "use" statement for this annotation?)
source d'informationauteur Xavier
Vous devez vous connecter pour publier un commentaire.
Essayer cela,
Dans le cas de l'envoi d'une requête Ajax, vous avez besoin de retourner
json/plaintext/xml
de données, et non pas un ensemble deResponse
objet.PS: Ne pas oublier d'ajouter l'utilisation de tresorerie pour
Request
etJsonResponse
EDIT : Que le message d'erreur que vous avez ajouté en dit, vous avez besoin d'importer l'annotation
@Method
en utilisant :use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
J'étais à la recherche de l'ensemble de l'internet et n'ai pas trouvé de solution à un problème similaire. Mais j'ai trouvé ça->
Je n'avais ni problème avec le contrôleur, ni le javascript/jquery/ajax, ni les questions de sécurité.
C'était en .... attendre.... en HTML.
j'ai dû ajouter type="button" dans la balise html, sinon toute la page a été rafraîchissant.
4 heures gaspillées pour des fins de débogage.. mais les leçons apprises.
Comment déboguer des problèmes?
1. Vérifier si l'ajax est l'envoi de la poste et de correspondance de post la route sur le côté client. Firefox -> f12 -> réseau -> regarder les événements POST
2. Vérifier l'symfony profiler (outil très utile!) sur l' -> /app_dev.php/(environnement dev) -> Get de Requête/Réponse sous-menu fin dernière de 10, si Vous voyez le POST de la route surveiller de près si son code de retour et des paramètres (vous ne verrez pas de réponse, si son jeu autres que le HTML de la réponse)
3. Dans votre contrôleur de faire une action qui peut être vérifié si le script à l'intérieur de cette route a été exécuté. Si oui, et que Vous ne voyez pas de réponse de sa soit sur le côté serveur (contrôleur) ou côté client (twig/ajax/html)
4. Code des exemples:
Bouton en html (ce qui était mon problème)
Ajax en html ou autre fichier js:
Maintenant.. côté serveur. Contrôleur:
File put contents
créer un nouveau fichier dans le répertoire web. Si il a été adapté et le fichier est créé, ce qui signifie que Vous correspondait à la route, mais n'a pas obtenu la réponse