到目前为止:422错误使用前端的ajax为我的连接表发布帖子请求。
我正在使用rails(作为我的api)和ajax为fullstack项目创建应用程序,以便向我的路由发出api请求。我的后端有三个表(用户:: email,:token,:password_digest),(fantasy_players :: player_id,:user_id,:target)和(player :: name,:team,:bye)
在我的前端,我可以成功发布到我的玩家桌面,我的后端的卷曲请求似乎对我的fantasy_players表格很好。我收到了422个不可处理的实体,服务器代码如下:
Started POST "/fantasy_players" for 127.0.0.1 at 2017-12-02 19:29:38 -0500
Processing by FantasyPlayersController#create as */*
Parameters: {"submit"=>"Add To My Players", "player"=>{"id"=>"1"}, "fantasy_player"=>{"target"=>"yes"}}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."token" = $1 LIMIT $2 [["token", "92ed3b66f0608a14b0225cad5a362027"], ["LIMIT", 1]]
(0.2ms) BEGIN
(0.2ms) ROLLBACK
[active_model_serializers] Rendered ActiveModel::Serializer::Null with ActiveModel::Errors (0.41ms)
Completed 422 Unprocessable Entity in 8ms (Views: 2.7ms | ActiveRecord: 0.6ms)
const onAddUserPlayer = function (event) {
event.preventDefault()
const data = getFormFields(this)
console.log(data)
api.addUserPlayer(data)
.then(ui.addUserPlayerSuccess)
.catch(ui.addUserPlayerFailure)
}
const addUserPlayer = function (data) {
return $.ajax({
url: config.apiOrigin + '/fantasy_players',
method: 'POST',
headers: {
Authorization: 'Token token=' + store.user.token
},
data
})
}
答案 0 :(得分:0)
我认为这是CSRF
问题。
呈现此对应视图的布局应包含:
<%= csrf_meta_tag %>
它将CSRF令牌添加到您的视图标题中,因此您可以使用以下内容轻松地从前端获取它:$('meta[name="csrf-token"]').attr('content')
。
在您的情况下,尝试向您beforeSend
请求添加ajax
。也许是这样的:
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
干杯!