我想坚持一个实体并用ajax捕获一条消息(没有Jquery),但我遇到了boolean $ request-> isXmlHttpRequest()的麻烦。
这里的脚本:
var xhr = getXMLHttpRequest();
xhr.open("POST", "{{ path('deplacement') }}", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("coordonnee="+abs+"-"+ord+"&name="+personnage[0].getAttribute('id'));
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
var classPersonnage = personnage[0].getAttribute('class');
var arrayClassPersonnage = classPersonnage.split(' ');
var id = personnage[0].getAttribute('id');
personnage[0].removeAttribute('class');
var newClass= '';
for (i=0; i < arrayClassPersonnage.length-1; i++){
newClass= newClass+' '+arrayClassPersonnage[i];
}
document.getElementById(id).setAttribute('class', newClass);
var resultat = JSON.parse(xhr.responseText);
alert(resultat['message']);
}
我的控制器php在这里
/**
* @Route("/game/combat/test", name="deplacement")
*/
public function deplacementAction(Request $request){
if($request->isXmlHttpRequest())
{
$response = new JsonResponse();
return $response->setData(array('message' => 'Ok.'));
}
else{
$response = new JsonResponse();
return $response->setData(array('message' => 'false'));
}
}
我总是'假'。我试着这样做:
$response = new JsonResponse();
return $response->setData(array('message' => 'Ok.'));
所以没有$ request-&gt; isXmlHttpRequest(),但我抓住了一个内部错误服务器500.请帮助我,我变得疯狂。
答案 0 :(得分:0)
检查方法查看代码的方法总是有助于找到代码问题的解决方案。如果您检查reservation = Reserve.objects.get(pk=request.POST.get('reservation'))
方法,可以在其dockblock中看到如下内容:
如果您的JavaScript库设置了X-Requested-With HTTP标头
,则它可以正常工作
方法体是:
isXmlHttpRequest
然后你需要添加正确的标题(大多数JS框架/库默认添加它,例如见jQuery滚动到return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
部分):
headers
答案 1 :(得分:0)
我尝试了一个更简单的例子并犯了同样的错误。我点击按钮,我想要消息。
这里是按钮和脚本:
<button onclick="affichage()">Appuyer</button>
<script>
function affichage(){
if (window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{
var resultat = JSON.parse(xhr.responseText);
alert(resultat['message']);
}
else
{
alert('Erreur');
}
}
};
xhr.open("POST", "{{ path('deplacement') }}", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(null);
}
</script>
此处带路径的文件(&#39; deplacement&#39;):
<?php
namespace GameBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
class ResolutionController extends Controller
{
/**
* @Route("/game/combat/test", name="deplacement")
*/
public function deplacementAction(Request $request){
$request = $this->get('request');
if($request->isXmlHttpRequest())
{
$response = new JsonResponse();
return $response->setData(array('message' => 'Ok.'));
}
else{
$response = new JsonResponse();
return $response->setData(array('message' => $request->isXmlHttpRequest()));
}
}
}
我得到了xhr.send(null)的错误:无法加载资源,服务器响应状态为500.
我只想得到这个来纠正真实的代码。