【发布时间】:2021-03-26 13:07:33
【问题描述】:
我正在做一个小型网络项目,所以我认为这是一个学习 Symfony 框架的机会。
所以事情是我正在开发一个简单的游戏,玩家可以在他们的库存中存储一些物品,或者更改他们的坐标并动态地这样做我考虑使用 Ajax,但每次查询没有被执行并且控制台向我展示:
500
内部服务器错误
而且树枝路径功能也没有正确映射路线。
这是包含部分 JS 代码的 html.twig 文件(为了测试它是否有效,我将它直接插入到 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 & 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%C3%A9ographiques-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 App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Items;
use App\Entity\Players;
use App\Entity\Inventaire;
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 响应,我还应该补充一点,我尝试使用其他方法(没有 jQuery 的经典 JS 中的 ajax 查询,使用 XMLHttpRequest 和还获取我已经在其他应用程序中使用过的 API,但我无法弄清楚我在 Symfony 环境中做错了什么。
【问题讨论】:
-
您是否在 Symfony 的日志中看到任何严重或错误
-
我建议您首先尝试从其他客户端(例如 curl 或 postman)访问您的控制器。以确保您的呼叫配置正确,并且您的控制器正在监听您期望的位置。有错误的网址并获得 500 是很常见的
标签: javascript php jquery ajax symfony