2017-02-20 31 views
0

У меня есть ExceptionListener, реализованный в Symfony3 (также работает в Symfony2). ExceptionListener определяет, был ли запрос обычным HTTP или AJAX (XmlHttpRequest) и соответственно генерирует ответ. При использовании jQuery .post() или .ajax()ExceptionListener возвращает $request->isXmlHttpRequest() как ИСТИНА, но при использовании javascript var xhr = new XmlHTTPRequest()ExceptionListener возвращает $request->isXmlHttpRequest() как FALSE. Я использую последний в небольшом количестве случаев, когда файлы должны быть загружены с помощью AJAX (который не может быть сделано с помощью .post() или .ajax().Symfony 3 - Отправка запроса AJAX как XmlHttpRequest() (javascript) не подбирает запрос как XmlHttpRequest в backend

Я ищу решение (либо во внешнем интерфейсе или серверной), чтобы решить мою ExceptionListener неправильно собирание это вверх как обычный запрос HTTP

Frontend Код:.

function saveUser() 
{ 
    var form = document.getElementById('userForm'); 
    var formData = new FormData(form); 
    var xhr = new XMLHttpRequest(); 

    xhr.open('POST', '{{url('saveUser')}}', true); 
    xhr.onreadystatechange = function (node) 
    { 
     if (xhr.readyState === 4) 
     { 
      if (xhr.status === 200) 
      { 
       var data = JSON.parse(xhr.responseText); 
       if (typeof(data.error) != 'undefined') 
       { 
        $('#processing').modal('hide'); 
        $('#errorMsg').html(data.error); 
        $('#pageError').modal('show'); 

       } 
       else 
       { 
        $('#successMsg').html('User Successfully Saved'); 
        $('#processing').modal('hide'); 
        $('#pageSuccess').modal('show'); 
        $('#userModal').modal('hide'); 
        updateTable(); 
       } 
      } 
      else 
      { 
       console.log("Error", xhr.statusText); 
      } 
     } 
    }; 
    $('#processing').modal('show'); 
    xhr.send(formData); 

    return false; 
} 

ExceptionListener.php (частичные)

# If AJAX request, do not show error page. 
if ($request->isXmlHttpRequest()) # THIS RETURNS FALSE ON JS XmlHTTPRequest() 
{ 
    $response = new Response(json_encode(array('error' => 'An internal server error has occured. Our development team has been notified and will investigate this issue as a matter of priority.'))); 
} 
else 
{  
    $response = new Response($templating->render('Exceptions/error500.html.twig', array())); 
} 
+0

вы пробовали проверка $ _SERVER [ «HTTP_X_REQUESTED_WITH»]? – madalinivascu

+0

$ _SERVER ['HTTP_X_REQUESTED_WITH'] возвращает «XmlHTTPRequest» на .post() и .ajax() - «Undefined index» как обычный HTTP-запрос, так и на javascript new XmlHTTPRequest() - такая же проблема (не удалось отличить этот новый XmltHttpRequest () на самом деле является запросом AJAX). – Magnanimity

+0

, а затем, используя ваниль ajax, пройдите X-запрошенный-С заголовком на свою страницу ajaxed. – madalinivascu

ответ

2

При использовании ванили Аякса вам необходимо пройти следующий заголовок к вашему запросу АЯКС

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
+1

Спасибо, добавив заголовок запроса решил проблему. – Magnanimity