【发布时间】:2016-04-16 18:37:36
【问题描述】:
这个问题与一个仍然无法解决的问题相关联,但我现在已经非常准确地确定了它,我专注于我所知道的错误原因,但我已经尝试了我所知道的所有方法。
问题是从 jquery 到控制器的 $.post 会引发 500 内部服务器错误,这实际上是在 VerifyCSRFToken.php 文件的第 67 行中捕获的“不匹配令牌异常”。
因此,控制器没有获取到值,因为中间件停留在中间
为了解决这个问题,我做了:
1) 转到 App\Middleware\VerifyCSRFToken.php 并包含 jquery sn-p 中的路由以被忽略。这应该足够了,但事实并非如此。
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = ['findcountries', 'findpaises','prueba'];
}
2) 另外,我在视图页面中添加了这个元标记。 (实际上,如果我想允许使用 csrf 发送)
<meta name="csrf-token" content="{{ csrf_token() }}">
3) 我包含了我从视图中调用的这段代码 sn-p
// public/js/config.js
$(function () {
$.ajaxSetup({
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
});
});
让我感到困惑的是,复制粘贴代码在我的生产服务器上工作了几个月,实际上 CSRFVerifyToken php 文件中的忽略路由起到了作用,我什至不需要元标记和其他 sn-p。
现在我正在 cloud9 中开发 web 的改进版本,我无法摆脱这个问题。
有谁知道怎么办?
谢谢你 更新
这是给出问题的代码:
function cargarProvincias() {
var country = $('#country').val();
$url = "{{URL::route('findcountries')}}";
this one ==> $.post($url, {pais:country},function(data){
$('#regions').empty();
$.each(data, function(key, value){
$('#regions').append('<option value="' + key + '">' + value + '</option>')});
cargarCiudades();
});
}
【问题讨论】: