我有一些控制器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()
应该允许它通过。