Symfony 5 执行 AJAX 查询时出现错误 500

Posted

技术标签:

【中文标题】Symfony 5 执行 AJAX 查询时出现错误 500【英文标题】:Symfony 5 error 500 when performing an AJAX query 【发布时间】: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 是很常见的 【参考方案1】:

好吧,我面临的这个问题的答案很愚蠢!我只是忘记导入 JsonResponse 类,这就是错误 500:internal server error 的原因,我希望这对某些人有用。 感谢所有花时间阅读我的帖子并提供帮助的人。

【讨论】:

另一个问题,如果您没有文件访问权限,例如:您是 chown user:user 并且发送文件有 www-data:www-data ;-)

以上是关于Symfony 5 执行 AJAX 查询时出现错误 500的主要内容,如果未能解决你的问题,请参考以下文章

发出 AJAX 请求时出现“405 方法不允许”

尝试获取关系中的数据时出现 Symfony 错误

cURL 错误 60:尝试使用 symfony 时出现 ssl 认证问题

当我尝试使用 symfony 创建实体时出现 Aborted 错误消息 [重复]

Symfony3 / Doctrine2 中 $em->clear() 时出现未定义索引错误

从请求返回字符串时出现错误错误 80020101 的 ajax 问题