我有一个使用jquery数据表和ajax数据源的L5.1应用程序。除了一个会导致服务器在发布ajax请求以获取数据时抛出异常之外,所有这些方法都工作得很好。我得到的错误是:
DecryptException in BaseEncrypter.php line 45:
The payload is invalid.
我认为这可能与ajax请求发布的数据量有关,因为这个特定的数据表比其他数据表发布的数据更多。此外,它必须与CSRF保护有关,因为如果我从CSRF中排除路由,那么它就可以正常工作。
这里是我发送的头:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:1589
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:gsScrollPos=; _gat=1; _ga=GA1.2.478522745.1445258590; XSRF-TOKEN=eyJpdiI6IlVYckJ5RW5rcVFVUlU0RjJLYjNmOWc9PSIsInZhbHVlIjoiRzRPcG4wWEhsaHVsSGdFRzh0UnhWWU5kXC9Jd0F1YWNjK0poOW5TcVpWMHhSZ0l6MXNtWVdZZ1pJVHBrRUJpYkZuaENacUxsM2M4RkxKOGVoNG5BSGtnPT0iLCJtYWMiOiJkNGUxOWM0NzQ2MThjNDg1OTg0MjIwYmY5NGNmZGEzNzc5ZjZiNmExYTQ1Yjk0YTc2YWRlMTYyZDI5OWQ5N2ZkIn0%3D; session=eyJpdiI6ImdpRXozUXBmT2lLRmhOSnU0QW9zTlE9PSIsInZhbHVlIjoiMmN3QXZWeVFqWEhMSmw1QTdIaEY4WU1EOEszM1RKQU0xTE00Z2I5VVh3RjNLSFpqQUZ6dDRYdU0rK3FVekhZXC9rZkNWakN4a0ZtOTMrYnZDS0doWHF3PT0iLCJtYWMiOiI0MDA3ZDgyNTI3MTY0ZDlmNjZjM2IzYmJjZTQ2NTc4ZjdiNDRjN2M4M2VhMWU1MDc2YzE1ZmM1MDA1M2NkNDZlIn0%3D
Host:local.thecraftchannel.tv
Origin:https://local.website.com
Pragma:no-cache
Referer:https://local.website.com/admin/shows/edit/1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
X-Requested-With:XMLHttpRequest
X-XSRF-TOKEN:PGBwTUHVjIQJPuZHLhqX2yEJFl0srgP1J4lO2oJy
下面是表单数据,也通过请求发送:
draw:1
columns[0][data]:0
columns[0][name]:
columns[0][searchable]:true
columns[0][orderable]:true
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:1
columns[1][name]:
columns[1][searchable]:true
columns[1][orderable]:true
columns[1][search][value]:
columns[1][search][regex]:false
columns[2][data]:2
columns[2][name]:
columns[2][searchable]:true
columns[2][orderable]:true
columns[2][search][value]:
columns[2][search][regex]:false
columns[3][data]:3
columns[3][name]:
columns[3][searchable]:true
columns[3][orderable]:true
columns[3][search][value]:
columns[3][search][regex]:false
columns[4][data]:4
columns[4][name]:
columns[4][searchable]:true
columns[4][orderable]:true
columns[4][search][value]:
columns[4][search][regex]:false
columns[5][data]:5
columns[5][name]:
columns[5][searchable]:false
columns[5][orderable]:false
columns[5][search][value]:
columns[5][search][regex]:false
order[0][column]:0
order[0][dir]:asc
start:0
length:10
search[value]:
search[regex]:false
product_ids[]:8
product_ids[]:5
product_ids[]:4
product_ids[]:3
product_ids[]:6
product_ids[]:9
product_ids[]:14
product_ids[]:11
product_ids[]:16
product_ids[]:21
product_ids[]:23
谁知道为什么我得到这个错误?
如果你想使用Laravel提供的CSRF保护,你必须在你的请求中指定CSRF令牌。
要做到这一点,您可以这样做:
添加一个meta标签:
<meta name="csrf-token" content="{{ csrf_token() }}">
设置你的jQuery使用这个令牌为所有的ajax请求,像这样:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
原始回答
由于你有很多数据,可能你的数据库中的列类型太小,因此你得到这个错误。
尝试在迁移中将列设置为longtext
而不是text
,看看是否有效。