Kohana:如何从ajax发送类似外部的内部请求


Kohana: How to send internal request like external from ajax?

我有一些控制器Ajax。该控制器对请求进行一些验证,如果不是来自ajax,则返回错误消息。

函数is_ajax()检查标头X-Requested-Wise并返回true或false。

我使用ajax的这个链接和所有的工作。

/ajax/somecontroller/someaction

当我尝试在内部使用它时——我有自己的验证错误——而不是ajax请求。

这是我的代码:

$deleted = Request::factory("/ajax/somecontroller/someaction")
                        ->headers("Content-Type", "application/x-www-form-urlencoded")
                        ->headers('HTTP_X_REQUESTED_WITH', 'XmlHttpRequest')
                        ->headers('X-Requested-With', 'XmlHttpRequest')                            
                        ->method(Request::POST)
                        ->post(array(
                            "id_zone_comp" => $id_zone_comp
                        ))
                        ->execute()->body();

我发送了所需的头,但有错误。

如何像外部一样发送内部请求?

Kohana 3.2。


当然,我可以处理像Ajax这样的内部查询,只是在is_internal()之后给它们访问权限,但这不是答案。

您面临的问题与它实际上是一个内部请求这一事实有关。因此,您发送的标头不会填充$_SERVER环境信息数组。它们被保存在$this->request->headers()内。

ajax检查是基于$_SERVER内容在中完成的,如下所示:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
    // Typically used to denote AJAX requests
    $requested_with = $_SERVER['HTTP_X_REQUESTED_WITH'];
}

唯一不包括is_internal()检查的解决方案是将此请求设置为外部请求,为此,您必须将请求URL设置为包括协议(http://)和完整域名(本质上是完整地址)。然后,请求将用新的头填充$_SERVER数组,is_ajax()应该允许它通过。