Laravel AJAX 补丁 - 在数据中发送 _method:'patch'
Laravel AJAX Patch - send _method:'patch' in the data
我正在尝试通过 AJAX 向我的 Laravel 应用程序发送一些数据。
我正在使用 jQuery 作为 AJAX 位。
我正在尝试使用的 HTTP method
是 PATCH
。
我想在 data
中包含方法名称(补丁)并将 type
保留为 POST
,因为这将确保更好的浏览器兼容性。
我使用 PATCH
作为 type
设置了所有内容,一切正常。
然后我将 type
更改为 POST
并将 'spoofed' 方法名称放在 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 异常)......它确实识别欺骗 method
并且所有工作,当我不使用 JSON.stringify
时 data
,但我需要这样做才能使一切正常。
我觉得我已经很接近了,我只需要放一些代码,也许是一个新的中间件 class 并通过它来路由这些请求,这样我就可以成功地欺骗 PATCH HTTP
方法?
有什么想法吗?
谢谢!
这里是如何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
header 以获得正确的路由句柄。在您的情况下,您只需添加
headers: { 'X-HTTP-Method-Override': 'PATCH' },
我正在尝试通过 AJAX 向我的 Laravel 应用程序发送一些数据。
我正在使用 jQuery 作为 AJAX 位。
我正在尝试使用的 HTTP method
是 PATCH
。
我想在 data
中包含方法名称(补丁)并将 type
保留为 POST
,因为这将确保更好的浏览器兼容性。
我使用 PATCH
作为 type
设置了所有内容,一切正常。
然后我将 type
更改为 POST
并将 'spoofed' 方法名称放在 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 异常)......它确实识别欺骗 method
并且所有工作,当我不使用 JSON.stringify
时 data
,但我需要这样做才能使一切正常。
我觉得我已经很接近了,我只需要放一些代码,也许是一个新的中间件 class 并通过它来路由这些请求,这样我就可以成功地欺骗 PATCH HTTP
方法?
有什么想法吗?
谢谢!
这里是如何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
header 以获得正确的路由句柄。在您的情况下,您只需添加
headers: { 'X-HTTP-Method-Override': 'PATCH' },