我想保留一个实体并使用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-> isXmlHttpRequest(),但是我遇到了内部错误服务器500。请帮助我,我变得疯狂。
最佳答案
检查方法在其代码中的作用始终有助于找到代码问题的解决方案。如果检查isXmlHttpRequest
方法,则可以在其停靠区中看到类似以下内容的内容:
如果您的JavaScript库设置了X-Requested-With HTTP标头,则此方法有效
方法主体为:
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
然后,您需要添加正确的标题(大多数JS框架/库默认添加该标题,例如,参见jQuery滚动到
headers
部分):xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");