Ajax在参数中放置请求不接受id
ajax put request not accepting id in params
我有一个点击事件触发更新到rails应用程序中的记录。服务器错误是会议不识别字符串,所以我把id变成了int。然后我遇到了路障。我尝试了2种不同的方法,两个服务器错误都在
下面$('.cancelMeeting').click(function(e) {
e.preventDefault();
console.log(this.href);
var fullUrl = this.href;
var hrefLength = (this.href).length;
var idString = fullUrl.substring(hrefLength-2);
var id = parseInt(idString);
console.log(typeof id);
var source = $(".cancelMeetingPrompt").html();
var compiled = Handlebars.compile(source);
$('.meetingHolder').append(compiled());
$('.confirmCancelMeeting').click(function(e) {
e.preventDefault();
var cancelNotes = $('.cancelNotes').val();
$.get('/set_user', function(result) {
var userId = result.id
console.log(userId);
console.log(id);
$.ajax ({
type: "PUT",
url: '/meetings/'+id,
data: {
meeting: id, **only in second error log below**
cancel_user_id: userId,
status: 'Cancelled',
notes: cancelNotes
},
datatype: 'json',
success: function(result) {
console.log(result);
},
error: function(result) {
console.log(typeof id);
console.log(result);
}
});
})
});
});
当我控制id的日志类型时,它显示的是number。但是当我运行它时,给出了下面的错误:
Started PUT "/meetings/76" for 127.0.0.1 at 2016-10-06 19:38:00 -0400
Processing by MeetingsController#update as */*
Parameters: {"cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"khkj", "id"=>"76"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Meeting Load (0.2ms) SELECT "meetings".* FROM "meetings" WHERE "meetings"."id" = ? LIMIT 1 [["id", 76]]
Completed 400 Bad Request in 6ms (ActiveRecord: 0.5ms)
ActionController::ParameterMissing (param is missing or the value is empty: meeting):
app/controllers/meetings_controller.rb:95:in `meeting_params'
app/controllers/meetings_controller.rb:61:in `block in update'
app/controllers/meetings_controller.rb:60:in `update'
在我上面粘贴的ajax调用中,它确实声明了meeting:id,试图纠正这个错误,并且它收到了这个错误
Started PUT "/meetings/76" for 127.0.0.1 at 2016-10-06 19:41:24 -0400
Processing by MeetingsController#update as */*
Parameters: {"meeting"=>"76", "cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"kjl", "id"=>"76"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Meeting Load (0.1ms) SELECT "meetings".* FROM "meetings" WHERE "meetings"."id" = ? LIMIT 1 [["id", 76]]
Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.4ms)
NoMethodError (undefined method `permit' for "76":String):
app/controllers/meetings_controller.rb:95:in `meeting_params'
app/controllers/meetings_controller.rb:61:in `block in update'
app/controllers/meetings_controller.rb:60:in `update'
为什么不工作?特别是考虑到我使用url将其直接发送给控制器,所以它不应该只是拉出与url一起传递的id吗?
任何线索,为什么这是不工作是赞赏。谢谢!
* * * * * * * * * * * * * *更新
由于下面的答案,我能够正确地传递参数,但又出现了另一个错误。
Started PUT "/meetings/84" for 127.0.0.1 at 2016-10-06 21:32:46 -0400
Processing by MeetingsController#update as */*
Parameters: {"meeting"=>{"cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"gsdf"}, "id"=>"84"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Meeting Load (0.2ms) SELECT "meetings".* FROM "meetings" WHERE "meetings"."id" = ? LIMIT 1 [["id", 84]]
(0.1ms) begin transaction
SQL (0.6ms) UPDATE "meetings" SET "notes" = ?, "updated_at" = ? WHERE "meetings"."id" = ? [["notes", "gsdf"], ["updated_at", "2016-10-07 01:32:46.982349"], ["id", 84]]
(1.5ms) commit transaction
Redirected to http://localhost:3000/profile/home
Completed 302 Found in 14ms (ActiveRecord: 2.7ms)
Started PUT "/profile/home" for 127.0.0.1 at 2016-10-06 21:32:46 -0400
ActionController::RoutingError (No route matches [PUT] "/profile/home"):
在rails scaffolding自动创建的更新方法中,它有一行在更新
之后重定向 format.html { redirect_to home_url, notice: 'Your lex is set! Click Plan Meeting to plan some conversation topics.' }
希望它能帮助到其他人:)
您的错误似乎是由控制器中的rails strong params
引起的,如这一行所示:app/controllers/meetings_controller.rb:95:in 'meeting_params'
.
(param is missing or the value is empty: meeting)
表示您的meeting_params
方法缺少所需的键。所以,如果你的meeting_params
看起来像这样:
def meeting_params
params.require(:meeting).permit(....)
end
Rails正在寻找所需的meeting
键。在第一个示例中,传入的参数是:
{"cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"khkj", "id"=>"76"}
Rails期望像这样的params散列:
{"meeting" => {"cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"khkj", "id"=>"76"}}
修改你的ajax
请求应该照顾它:
$.ajax({
type: "PUT",
url: '/meetings/'+id,
data: {
meeting: {
id: id,
cancel_user_id: userId,
status: 'Cancelled',
notes: cancelNotes
}
},...
第二个错误
当你在哈希中传递meeting
时,你的params
会彻底变为:
Parameters: {"meeting"=>"76", "cancel_user_id"=>"1", "status"=>"Cancelled", "notes"=>"kjl", "id"=>"76"}
Rails实际上看到了meeting
键,因为现在它存在并在其上调用permit
。但是,params[:meeting]
返回字符串"76"
。Rails期望在hash
上调用permit
。因此,这就是为什么你看到第二个错误。
NoMethodError (undefined method `permit' for "76":String)
- autocomplete不接受源的json对象
- 为什么 AJAX POST 请求不起作用
- 不接受0-0-0的正则表达式是什么
- Javascript Regexp-不接受空格,但应该接受
- mandrill合并标记不接受变量值
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- AJAX请求不起作用,除非使用alert()
- Ajax Post请求不起作用
- Moment.js不接受变量作为参数
- IE8 jquery ajax头请求不起作用
- 时间字段上的JavaScript验证(不接受0:00格式)
- 为什么这个请求不会遵循我的龙卷风重定向
- JQuery AJAX请求不起作用
- 不接受传递给javascript的参数
- 为什么 Array.prototype.reduce() 不接受 Map 对象作为初始值
- AJAX 请求不会在 400 个错误查询上执行失败
- @RequestParam不接受'&'在从请求发送的字符串中,存储&并截断其余部分
- Ajax在参数中放置请求不接受id
- AJAX POST请求接受数字,但不接受字符串
- 为什么一个函数不接受第二次请求?