【发布时间】:2019-03-09 04:10:01
【问题描述】:
我正在尝试使用 AJAX 从我的一个 Laravel 站点向另一个站点发送跨域 post call。
我看到的另一个主题解决了我在访问控制标头中遇到的第一个问题:Jquery: Cross-domain ajax 'POST' with laravel
我收到 419 错误,表示我没有使用 CSRF 令牌,但我使用的任何一个令牌(本地令牌或其他域令牌)都不起作用。
var CSRF_TOKEN = {{ csrf_token() }};
$.ajaxSetup( { headers : { 'X-CSRF-TOKEN' : CSRF_TOKEN } } );
var tracking_id = "{{ isset( $tracking_id ) ? $tracking_id : 'test-20' }}";
$.ajax({
type: 'POST',
url: 'https://example.com/beacon',
crossDomain: true,
data: { 'tracking_id': tracking_id },
success: function(responseData, textStatus, jqXHR) {
console.log( 'Click!' );
},
error: function (responseData, textStatus, errorThrown) {
console.log( responseData );
}
});
【问题讨论】:
-
“它不起作用”不是一个明确的问题陈述。发生什么了?报告了哪些错误?在浏览器中查看开发工具的网络选项卡。你得到你期望的请求了吗?您得到了预期的响应吗?
-
“Laravel 的跨域 Ajax POST”——你不知道。 Ajax 请求由浏览器中的 JavaScript 发送。你可以用 Laravel 响应请求,但不会用它发送请求。
-
"暗示我没有使用 CSRF 令牌,而是使用我使用的任何一个令牌(本地令牌或其他域令牌)" — 您发出请求的站点将关心其 CSRF令牌……但是 CSRF 令牌的目的是防止跨域触发请求,但是您是否有一个端点来发出 Ajax 请求以防止 CSRF?
-
crossDomain: true,不会做任何事情,除非您发出相同的源请求并将 HTTP 重定向到不同的源。在您的代码中可能毫无意义。 -
@Quentin 我确实包含了错误代码及其含义。我知道 Laravel 不会拨打电话,但这正是我对标题的措辞。我使用了来自其他站点的 CSRF 令牌,这仍然给了我 419 错误作为响应。
标签: javascript jquery ajax laravel post