我想保留一个实体并使用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");

07-28 10:47