Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获得$request->;isXmlHttpRequest()始终为false_Javascript_Php_Ajax_Symfony - Fatal编程技术网

Javascript 获得$request->;isXmlHttpRequest()始终为false

Javascript 获得$request->;isXmlHttpRequest()始终为false,javascript,php,ajax,symfony,Javascript,Php,Ajax,Symfony,我想用ajax(不使用Jquery)持久化一个实体并捕获一条消息,但在布尔$request->isXmlHttpRequest()中遇到了问题 此处的脚本: var xhr = getXMLHttpRequest(); xhr.open("POST", "{{ path('deplacement') }}", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send("

我想用ajax(不使用Jquery)持久化一个实体并捕获一条消息,但在布尔$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']);
    }
我总是说“假”。我试着这样做:

$response = new JsonResponse();
return $response->setData(array('message' => 'Ok.'));

因此,在没有$request->isXmlHttpRequest()的情况下,我发现服务器500出现了一个内部错误。请帮帮我,我疯了

查看一个方法的代码时,检查该方法的功能总是有助于找到代码问题的解决方案。如果选中
isXmlHttpRequest
方法,您可以在其dockblock中看到如下内容:

如果您的JavaScript库设置了一个X-Requested-With HTTP头,它就可以工作

方法主体为:

return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
然后,您需要添加正确的标题(大多数JS框架/库默认情况下都会添加该标题,例如,请参见滚动到
headers
部分):


我尝试了一个更简单的例子,却犯了同样的错误。我点击按钮,我想要的消息

下面是按钮和脚本:

<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>
Appuyer
函数affichage(){
if(window.XMLHttpRequest)
{ 
xhr=newXMLHttpRequest();
} 
else if(window.ActiveXObject)
{
xhr=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xhr.onreadystatechange=函数()
{ 
if(xhr.readyState==4)
{
如果(xhr.status==200)
{
var resultat=JSON.parse(xhr.responseText);
警报(resultat['message']);
}
其他的
{
警惕(“错误”);
}
}
}; 
open(“POST”,“{path('deplacement')}}”,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
xhr.send(空);
}
这里是路径为('deplacement')的文件:

setData(数组('message'=>'Ok');
}
否则{
$response=新的JsonResponse();
返回$response->setData(数组('message'=>$request->isXmlHttpRequest());
}
}
}
我在xhr.send(null)中遇到了错误:无法加载资源服务器响应,状态为500


我只是想用这个来纠正真正的代码。

也许可以检查一下你是否已经关闭了所有的
}
如果你不给我们看真正运行的代码,我们最终会发现一些愚蠢的错误,错过大图。}所有的代码都关闭了。我在另一篇文章中发布了一个更简单的示例,但也犯了同样的错误;对于后méthod。有什么问题吗?没关系(无需触摸),您还必须添加
X-request-with
标题。我的印象是,这个标题实际上是由低级
XMLHttpRequest
添加的,而不是在使用它的高级库/框架中添加的,不是吗?@jcaron nope
X-request-With
只是一个标题约定,它不是XHR规范的一部分。请编辑原始帖子,更新原始问题,不要将其作为答案发布。您应该将其作为另一个问题发布。人们不会在答案中寻找问题
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
<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>
<?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()));

    }
}

}