Ric*_*sec 5 php ajax jquery poller laravel
我在Laravel 5.0编写一个拍卖网站,通过使用每5秒执行一次的AJAX轮询来模拟实时更新.问题是我的服务器返回零星的HTTP 401状态.
我的路线是这样构建的:
Route::post(auction/live/update, 'AuctionController@ajaxSendUpdate');
Run Code Online (Sandbox Code Playgroud)
我的控制器是这样的:
public function ajaxSendUpdate() {
// Business logic: queries database, couple of Ifs, etc…
$data = array('success' => true, 'otherStuff' => $myData);
return Response::json($data);
}
Run Code Online (Sandbox Code Playgroud)
最后我的poller设置如下:
// a bit of HTML
function getAuctionUpdate() {
setTimeout(function () {
$.ajax({
type: "POST",
url: "{!! url('auction/live/update')!!}",
dataType: 'json',
data: {
auctionID: $('#auctionID').val()
},
success: function (data) {
if (data['success']) {
// Updates some labels, etc.
getAuctionUpdate(); // Rearms itself
}
}
} }); // Not sure if all brackets are correct in this snippet but they are 100% on real code
}, 5000);
Run Code Online (Sandbox Code Playgroud)
此代码运行良好约95%的时间.但它可以打破2种不同的结果:
1)服务器在一段时间后响应错误401并且永远不会恢复.在这种情况下,我们需要再次登录.登录后,一切顺利,结果再也不会发生.
2)服务器以零星的401响应,但在下一个(或几个)轮询请求后恢复.
我在Windows上使用Laravel 5.0和最新版本的Xampp.在Windows上使用WAMP可以轻松复制错误.未在Linux或OSX中测试过.我已经在laracasts.com和其他论坛中阅读了这个和这个和各种各样的主题,但我无法解决问题...
经过几个小时的测试,我相信我解决了这个问题,即使我不完全理解如何解决这个问题,即使这是一个可以应用于类似情况的通用答案。
\n\n在开发早期,我在 kernel.php 中禁用了 verifyCsrfToken 中间件,因此我没有通过 AJAX 请求发送任何 _token。启用VerifyCsrfToken中间件并立即发送_token使所有HTTP 401错误消失。现在,我开始遇到一个不同的问题:甚至更零星的 HTTP 500 错误。快速浏览一下日志,发现所有 HTTP 500 错误都是由 TokenMismatchException 引起的。
\n\n然后我遇到了这个。按照网页说明,我将其放入 master.page 标题中:
\n\n<meta name="csrf-token" content="{{ csrf_token() }}">\nRun Code Online (Sandbox Code Playgroud)\n\n这在我的 master.page javascript 中:
\n\n$.ajaxSetup({\n headers: {\n \'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n\n不知怎的,现在一切都很好。因此,出于所有意图和目的,我原来的问题得到了解决,但我仍然无法理解:
\n\n1 \xe2\x80\x93 如果我在 kernel.php 中禁用了VerifyCsrfToken 中间件,为什么当我没有通过 AJAX 请求发送任何 _token 时,我会收到偶发的 HTTP 401 错误?
\n\n2 \xe2\x80\x93 如果我开始使用 AJAX 请求发送 _token,为什么当我在 kernel.php 中启用VerifyCsrfToken 中间件时开始出现零星的 TokenMismatchException?
\n\n3 \xe2\x80\x93 为什么X-CSRF-TOKEN最终解决了HTTP 500错误问题?请记住,所有错误都是偶发性的,而不是永久性的:我敢说,所有 AJAX 请求中 95% 到 98% 的情况都很好,只有一小部分存在任何问题。
\n| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |