如题,网上是说使用$_SERVER['HTTP_X_REQUEST_WITH'],但我发现似乎不行。

解决方案 »

  1.   

    在请求头里加上个唯一标识作为ajax发送的http请求的标志,服务器端读发送请求头,当发现有ajax标志则判定为ajax请求.
      

  2.   

    楼上的就是最好的方法。在http头加标识
      

  3.   

    AJAX 请求多加一参数,如from_ajax=1
      

  4.   

    在Symfony中是这样判断的:public function isXmlHttpRequest()
    {
        return ($this->getHttpHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
    }我的站点中用到这个函数,经实践是可以用的。不推荐类似hack的方法,如果HTTP本身已经提供了这个功能,就应该用。
      

  5.   

    似乎iis是没有支持相关的函数,不知道apache或者其他的http服务器有没有相关的
      

  6.   


    在Ajax传送的数据中增加一个头信息。或者是在PHP建立一个专门接收Ajax访问的路径,所有的Ajax都访问到哪里就可以省去很多判断步骤了。
      

  7.   

    在AJAX传送数据中增加头信息的话,还是要进行判断。如果专门建立接受ajax访问的路径,我个人觉得又有点重复。
      

  8.   

    是不是ajax在请求有什么关系?cookie,来源都能模拟。你不会指望这个ajax判断能防泄露吧。不要把危险的数据写到客户端才是正道。
      

  9.   


    当然有关系,而且很有用。你看下:http://www.rsywx.net/books/01572.html那个用户自定义tag,就又可以用常规的post方式,又可以用ajax的方式更新。这就需要判断了。详细的介绍可以看这里:http://www.rsywx.net/wordpress/2009/02/08/going-for-symfony-%E7%AC%AC45%E5%A4%A9/
      

  10.   

    晚上会有X_REQUESTED_WITH是因为ajax是通过jquery来发起的。jquery会自动在请求里面添加一个标识符。其实也跟多get一个参数一样。如果你ajax不是通过jquery来发起的话。就无法实现通过这个来判断是否为ajax请求了。
      

  11.   

    可以这样来判断:if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
        echo 'Request successful';
    else
        echo 'This is not an AJAX request';