Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony $request->isXmlHttpRequest() issue

I need to check if the request is ajax. $request->isXmlHttpRequest() works fine, however if there is a redirect somewhere during the execution, this method will return false. How else can I check if request is ajax in this case? p.s. ajax is initiated by jQuery

like image 403
Dziamid Avatar asked Jan 11 '11 14:01

Dziamid


3 Answers

If you arent redirecting to a different application in your project or another external uri just use forward instead if isXmlHttpRequest is true on the first request.


Well that method checks against the value of the X-Requested-with header and in some browser implementations that header (or all original headers) are dropped/overwritten from the redirected request (FF to name one).

As a workaround you could use a variable in the request itself. You might be able to use the existing sf_format infrastructure, but im not sure if that would work because im not familiar with how it works internally.

like image 54
prodigitalson Avatar answered Oct 18 '22 18:10

prodigitalson


Some js libraries doesn't send the XmlHttpRequest value in the headers, juste add this in your script:

xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
like image 8
Pascal Avatar answered Oct 18 '22 19:10

Pascal


If you need an easy workaround, I would suggest

Use a URL like http://mywebsite.com/loadsomething.php?ajax=true and

$isAjax = $request->getParameter('ajax');

Or, if you are POSTing you can create a hidden field named "ajax" . Ofcourse these won't solve your problem forever but will work as a quick fix if you need this as soon as possible.

If you want to support only one redirect, you can create a flash variable as well.

Otherwise you can look at the source code of symfony:

http://trac.symfony-project.org/browser/branches/1.4/lib/request/sfWebRequest.class.php

On line 518 you can see the request object identifies the request to be ajax from the HTTP headers. So you have to find out that after the redirect why the same HTTP headers are not set properly.

like image 2
Aston Avatar answered Oct 18 '22 19:10

Aston