У меня есть 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()));
}
вы пробовали проверка $ _SERVER [ «HTTP_X_REQUESTED_WITH»]? – madalinivascu
$ _SERVER ['HTTP_X_REQUESTED_WITH'] возвращает «XmlHTTPRequest» на .post() и .ajax() - «Undefined index» как обычный HTTP-запрос, так и на javascript new XmlHTTPRequest() - такая же проблема (не удалось отличить этот новый XmltHttpRequest () на самом деле является запросом AJAX). – Magnanimity
, а затем, используя ваниль ajax, пройдите X-запрошенный-С заголовком на свою страницу ajaxed. – madalinivascu