Javascript 未使用Symfony定义AJAX值
实际上,我尝试使用AJAX和Symfony进行自定义身份验证,但我遇到了一个无法识别的问题。 AJAX部分似乎找不到路由,因为我的浏览器控制台无法“识别”我的路由脚本。我试图将AJAX数据与输入字段数据进行比较,问题是AJAX返回未定义的值。我将把代码的不同部分放在下面: 带有AJAX脚本的细枝模式:Javascript 未使用Symfony定义AJAX值,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,实际上,我尝试使用AJAX和Symfony进行自定义身份验证,但我遇到了一个无法识别的问题。 AJAX部分似乎找不到路由,因为我的浏览器控制台无法“识别”我的路由脚本。我试图将AJAX数据与输入字段数据进行比较,问题是AJAX返回未定义的值。我将把代码的不同部分放在下面: 带有AJAX脚本的细枝模式: <div class="modal fade" tabindex="-1" role="dialog" id="logi
<div class="modal fade" tabindex="-1" role="dialog" id="loginModal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Connexion</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body" align="center">
<form action="#" method="POST">
<label for="pseudoMail">Pseudo ou e-mail : </label>
<input type="text" id="pseudoMail" placeholder="Pseudo ou e-mail" name="pseudoMail" required><br>
<label for="mdp">Mot de passe : </label>
<input type="password" id="mdp" placeholder="Mot de passe" name="mdp" required><br>
<input type="submit" class="btn btn-primary" id="login" value="Se connecter" />
</form>
</div>
</div>
</div>
</div>
<script src="{{ asset('js/jquery-3.5.1.min.js') }}"></script>
<script>
$(document).ready(function () {
$("#login").click(function()
{
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'POST',
url: '{{ path('checkLogin') }}',
data: {
pseudo: $("input#pseudoMail").val(),//TODO Remplir l'Ajax de façon à ce que les données soient reconnues
motdepasse: $("input#mdp").val()
},
dataType: 'json',
success: function(data)
{
if(data.pseudo !== "" && data.motdepasse !== "")//TODO Modifier la condition et jouer les sons correspondants (dossier sfx)
{
setTimeout(alert("Vous êtes connecté !"), 5000);
var sound = document.createElement('audio');
sound.setAttribute('src', 'https://themushroomkingdom.net/sounds/wav/smb/smb_1-up.wav');
sound.play();
}
else
{
alert("Les identifiants ne correspondent pas. Veuillez réessayer.");
var sound = document.createElement('audio');
sound.setAttribute('src', 'https://themushroomkingdom.net/sounds/wav/smb/smb_fireworks.wav');
sound.play();
}
},
error: function(data)
{
console.log("Pseudo : " + data.pseudo);
console.log("Mot de passe : " + data.motdepasse);
console.log("Pseudo sans data : " + $('input#pseudoMail').val());
console.log("Mot de passe sans data : " + $('input#mdp').val());
console.log(data);
alert("Erreur détectée ! " + data);
}
});
});
});
</script>
正如charlietfl所说,AJAX代码和PHP代码之间的键不同。他们应该平等
data: {
pseudo: $("input#pseudoMail").val(),
motdepasse: $("input#mdp").val()
},
在AJAX请求中,键是pseudo
和motdepasse
。因此,在PHP代码中,您应该使用如下键:
$pseudoMail = $request->request->get('pseudo');
$motdepasse = $request->request->get('motdepasse');
此路由是否启用了
POST
方法类型?“$request-get-key与您发送的不同我尝试了您的解决方案,但不起作用(顺便感谢您的回答,我不知道这些键应该相等,我是AJAX初学者)。我认为这是一个路径问题,因为当我检查我的浏览器控制台时,我的PHP脚本根本没有加载。控制台向我显示一条消息,说明无法加载资源。这让我觉得路由根本不被识别,它不仅仅是一个关键错误。如果您需要更多代码来帮助您,请尽管问我。再次感谢您的帮助。您可以使用Symfony日志(在cmd中启动命令Symfony server:start
后)进行调试,也可以使用网络选项卡中的浏览器调试器(F12)进行调试,并通过单击XHR显示XHR请求日志。这是我所做的,但我遇到了一个错误,无法检查我的PHP代码。这就是为什么我认为这是AJAX脚本中URL参数的路径问题。我会给你看我得到的截图:。当我尝试检查“checkLogin”PHP脚本时,我无法检查任何内容。是否可以在AJAX脚本中使用twig语法(如果脚本在twig文件中)?因为这可能就是错误。再次感谢你。编辑:我正在使用Safari浏览器,也许这些信息会有帮助。好的,我发现了一些可能导致我的项目出现问题的其他信息。我将event.preventDefault()放在ajax函数的顶部,以避免页面自身刷新。现在我可以在XHR选项卡上看到一些内容,并在浏览器控制台上看到更多信息。我会试着找出另一个问题在哪里。这个问题现在已经解决了。我在理解数据处理过程中遇到了一些困难,但现在一切都正常了!我将把这个问题标记为已解决。非常感谢。
$pseudoMail = $request->request->get('pseudo');
$motdepasse = $request->request->get('motdepasse');