#javascript #php #jquery #ajax #symfony
#javascript #php #jquery #ajax #symfony
Вопрос:
Я работаю над мини-веб-проектом, поэтому я рассматривал это как возможность изучить фреймворк Symfony.
Итак, дело в том, что я разрабатываю простую игру, и игроки могут хранить некоторые предметы в своем инвентаре или изменять их координаты, и для этого динамически я думал об использовании Ajax, но каждый раз, когда запрос не выполняется, и консоль показывает мне:
500
Внутренняя ошибка сервера
а также маршрут неправильно отображается функцией twig path.
Вот файл html.twig, содержащий часть кода JS (чтобы проверить, работает ли он, я вставил его непосредственно в html.twig, но на самом деле я хочу, чтобы он был во внешнем файле js, потому что у меня есть много взаимодействий и функций для реализации, которые уже закодированы, но, к сожалению, я всегда сталкиваюсь с одной и той же проблемой)
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>{% block title %}LIP{% endblock %}</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
{% block stylesheets %}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font- awesome.min.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq /sMZMZ19scR4PsZChSR7A=="
crossorigin=""/>
<link rel="stylesheet" href="{{asset('css/signInUp.css')}}"/>
<link rel="stylesheet" href="{{asset('css/Homestyle.css')}}"/>
<link rel="stylesheet" href="{{asset('css/Playerstyle.css')}}"/>
{% endblock %}
<link rel = "icon" href = "{{asset("Icons/eiffel64.png")}}" type = "image/x-icon">
{% block javascripts %}
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
integrity="sha512- XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
crossorigin=""></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
console.log("executing internal ajax!");
//var idMagasin = $('#choixMagasin option:selected').attr('id');
$.ajax({
method: "POST",
url: "{{path('move_player')}}",
//data: {id: idMagasin},
success: function(data){
console.log(data);
//var periode = data.periode;
//console.log(donnees);
}
});
});
</script>
{% endblock %}
</head>
{% block body %}
<body>
<div class="section1" id="mapid">
</div>
<div class="section2" id="playerInterface">
{% if app.user %}
<a href="{{path('logout_Player')}}" id="logout">Déconnexion</a>
{% else %}
{% endif %}
<div move-path="{{path('move_player')}}"></div>
</div>
<div class="footer">
<p>2020 Copyright © ENSG Géomatique Developped by MaghraouiDE amp; Namekon Teulong PF</p>
<a href="https://www.facebook.com/ENSGeomatique" class="fa fa-facebook"></a>
<a href="https://fr.linkedin.com/edu/ecole-nationale-des-sciences-géographiques-12351" class="fa fa-linkedin"></a>
<img src="{{asset('Icons/logo_ensg.png')}}" class="logo"/>
</div>{% if app.user is defined %}
{% set player_data = {
pseudo: app.user.Username,
longitude: app.user.longitude,
latitude: app.user.latitude,
inventaire: app.user.inventaire,
} %}
<div data-player='{{ player_data | json_encode | raw }}'>
</div>
{% endif %}
{% block javascript %}
<script src="{{asset('js/code.js')}}"></script>
{% endblock %}
{% endblock %}
</body>
</html>
Вот мой контроллер:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
use SymfonyComponentHttpFoundationRequest;
use AppEntityItems;
use AppEntityPlayers;
use AppEntityInventaire;
class InteractionsController extends AbstractController
{
/**
* @Route("/interactions", name="interactions")
*/
public function index(): Response
{
return $this->render('interactions/index.html.twig', [
'controller_name' => 'InteractionsController',
]);
}
/**
* @Route("/interactions/move_player",name="move_player")
*/
public function moveplayer(Request $request,EntityManagerInterface $em){
$player = $this->getUser();
return new JsonResponse(array("username"=>$player->getUsername(),"longitude"=>$player->getLongitude()));
}
}
/**
* @Route("/interactions/affiche_scenario", name="affiche_scenario")
*/
public function afficheScenario(Request $request){
if ($request->isXmlHttpRequest()){
$repository = $this->getDoctrine()->getRepository(Scenarios::class);
return new JsonResponse($repository->findBy($request->request->get("num_scenario")));
}
else{
return new JsonResponse(array["error"=>"Something went wrong!"]);
}
}
}
/**
* @Route("/interactions/add_item",name="add_item")
*/
public function addItem(Request $request,EntityManagerInterface $em){
$player = $this->getUser();
$inventaire=$player->getInventaire();
return new JsonResponse(array("player"=>$player,"inventaire"=>$inventaire->getItem_id()));
}
Я удалил различную обработку с этих контроллеров, потому что я просто хочу протестировать ответ JSON, который не работает, я должен также добавить, что я пытался использовать другой метод (ajax-запрос в классическом JS без jQuery, с использованием XMLHttpRequest, а также fetch API, который я уже использовал в других приложениях, но я не могу использовать его).не могу понять, что я делаю не так здесь, в среде Symfony.
Комментарии:
1. Видите ли вы какие-либо критические ошибки или ошибки в журналах Symfony
2. Я бы рекомендовал вам сначала попытаться получить доступ к вашему контроллеру с другого клиента, такого как curl или postman. чтобы убедиться, что ваш вызов настроен правильно, и ваш контроллер прослушивает там, где вы ожидаете. Обычно неверный URL-адрес и получение 500
Ответ №1:
Ну, ответ на эту проблему, с которой я столкнулся, глупый! я просто забыл импортировать класс JsonResponse, вот почему ошибка 500: внутренняя ошибка сервера, я надеюсь, что это может быть полезно для некоторых людей. Спасибо всем, кто потратил время на чтение моего поста и пытался помочь.
Комментарии:
1. другая проблема, если у вас нет доступа к файлу, например: вы являетесь пользователем chown:user, а отправленный файл имеет www-data: www-data 😉