我试图通过AJAX将一些数据发送到我的Laravel应用程序。
我使用jQuery作为AJAX位。
我尝试使用的HTTP method
是PATCH
。
我希望在data
中包含方法名称(补丁),并将type
保留为POST
,因为这样可以确保更好的浏览器兼容性。
我使用PATCH
作为type
设置了所有内容,但一切正常。
然后我将type
更改为POST
并将“欺骗”' data
中的方法名称。然后事情就停止了。
这是我目前的AJAX代码:
var request = $.ajax({
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
url: ajaxURL,
type: "POST",
data: JSON.stringiy({_method: "PATCH", more_data:[the_data]}),
dataType: "json"
});
request.done(function( msg ) {
alert(JSON.stringify(msg));
});
现在,上述功能在成功运行的意义上确实有效。但Laravel不承认欺骗方法(并抛出一个MethodNotAllowed异常)......当我在{{1}上不使用method
时,它确实识别出欺骗性JSON.stringify
并且所有工作都有效但是我需要这样做才能使一切工作。
我觉得我很亲密,我只需要放一些代码,也许是一个新的中间件类并通过它来路由这些请求,以便我可以成功欺骗data
方法?
有什么想法吗?
谢谢!
答案 0 :(得分:1)
以下是Laravel检查请求方法(vendor/Symfony/http-foundation/Request.php
)
public function getMethod()
{
if (null === $this->method) {
$this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET'));
if ('POST' === $this->method) {
if ($method = $this->headers->get('X-HTTP-METHOD-OVERRIDE')) {
$this->method = strtoupper($method);
} elseif (self::$httpMethodParameterOverride) {
$this->method = strtoupper($this->request->get('_method', $this->query->get('_method', 'POST')));
}
}
}
return $this->method;
}
如您所见,您需要发送X-HTTP-METHOD-OVERRIDE
标头以获取正确的路由句柄。在您的情况下,您可以添加
headers: { 'X-HTTP-Method-Override': 'PATCH' },