我有一些控制器Ajax。该控制器对请求进行一些验证,如果不是从ajax返回错误消息。
函数is_ajax()检查标题X-Requested-With并返回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();
我发送所需的heades但有错误。
如何发送外部请求等内部请求?
Kohana 3.2。
当然我可以处理内部查询,例如Ajax,只是在is_internal()之后给它们访问,但这不是答案。
答案 0 :(得分:1)
您遇到的问题与事实上是内部请求有关。因此,您发送的标头不会填充$_SERVER
环境信息数组。它们保留在$this->request->headers()
内。
根据$ _SERVER内容完成ajax检查,如下所示:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
// Typically used to denote AJAX requests
$requested_with = $_SERVER['HTTP_X_REQUESTED_WITH'];
}
唯一不包含is_internal()
检查的解决方案是将此请求设为外部请求,为此,您必须将请求网址设置为包含协议(http://
)并已完整域名 - 基本上是一个完整的地址。然后,请求将使用新标头填充$ _SERVER数组,is_ajax()
应该让它通过。