我使用 Angularjs 和 Laravel 构建了我的应用程序。我使用 Firefox 进行开发和测试,所以我没有注意到这一点,直到它引起我的注意。我的应用程序只能在 Firefox 中运行,不能在 Chrome 或基于 Chrome 的浏览器中运行,我也无法追踪问题的根源。
我有一个按钮指令,当单击该指令时,它会执行一个将数据发布到服务器的函数,现在这在 Firefox 中工作正常,但在 Chrome 中不行,您可能会认为跨浏览器兼容性不起作用之类的问题会导致某些问题处理客户端代码,但我的应用程序仅在 Chrome 或基于 Chrome 的浏览器中抛出 500 内部服务器错误。
我通过在内部发布警报来测试该函数,并且该函数确实被调用。然后我去了服务器端,找到了处理请求的 Controller ,删除了指定函数中的代码,然后简单地执行了
return "hello";
这仍然不起作用,不断出现同样的错误。接下来,我没有使用按钮指令,而是使用了普通的 html 按钮,但我再次遇到了相同的错误。我不知道发生了什么或如何解决。
这是我在 Controller 内的函数:
$scope.event.addToCart = function(event, no_of_tickets, index) {
$scope.selectedIndex = index;
$scope.state = 'working';
var req = {
method: 'POST',
url: '/buyEventTicket',
headers: {
'X-XSRF-Token': $("meta[name='csrf_token']").attr("content")
},
data: {
event: event,
no_of_tickets: no_of_tickets
}
}
$http(req)
.success(function (data, status, headers, config) {
$rootScope.$broadcast('TICKET_ADDED', true);
$scope.selectedIndex = -1;
$scope.state = 'ready';
})
.error(function (data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
//alert(data);
});
}
之前,我检查了服务器抛出的错误,结果是:
DecryptException in Encrypter.php line 142: Invalid data.
注意:由于我无法准确查明错误原因,因此我不知道我的代码的哪一部分与此处相关。
最佳答案
将“X-XSRF-Token”更改为“X-CSRF-TOKEN”。请注意“XSRF”和“CSRF”之间的区别。
来自documentation : "注意:X-CSRF-TOKEN 和 X-XSRF-TOKEN 的区别在于,前者使用纯文本值,后者使用加密值,因为 Laravel 中的 cookie 始终是加密的。如果您使用 csrf_token( ) 函数来提供 token 值,您可能想要使用 X-CSRF-TOKEN header 。”
此外,文档指出加密的 XSRF token 存储在 XSRF-TOKEN cookie 中,并且 Angular 已经为您获取了该值。根据 Angular 的 documentation :“执行 XHR 请求时,$http 服务从 cookie 读取 token (默认情况下为 XSRF-TOKEN)并将其设置为 HTTP header (X-XSRF-TOKEN)。”因此,您似乎可以完全删除手动设置 token 的尝试,并且框架应该为您处理它。
关于Angularjs 代码无法在 Chrome 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020836/