如何响应 ajax 中的 Rails 呼叫
How to respond to ajax call in Rails
我知道 Whosebug 上已经有很多关于此的问题,但其中 none 对我很有用。这是我的 ajax 代码:
function update_schedule($task){
var taskId = $task.data("taskId"),
startHour, endHour,
userId = $('#users').val();
if( !$task.hasClass('daily-task')){
startHour = getStartHour($task),
endHour = startHour + (+$task.data('time'));
}
console.log(startHour, endHour)
$.ajax({
url: '/heimdall/update_scheduled_task',
method: 'POST',
data: { "task_id": taskId, "start_hour": startHour, "end_hour": endHour, "user_id": userId },
success: function (){
console.log("SUCESS!!", data['head'])
},
error: function () {
console.log("FAILURE");
},
async: true
});
}
控制器代码:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id])
end
我想 return 找到或创建的任务的 ID。我不知道如何 send/receive 此信息。我已经阅读了有关 respond to 的内容,但我仍然不知道如何在这种情况下使用它。
您可以 render json: ...
到 return ajax 所需的信息 JSON 格式:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id])
render json: {scheduled_task_id: scheduled_task.id}
end
并且在 ajax 函数成功后,像这样使用它:
success: function (data){
var data = JSON.parse(data);
console.log(data["scheduled_task_id"]);
},
jQuery 的 success
和 error
回调依赖于由控制器编辑的状态代码 return。当您无法 create/read/update 对象时,请确保您 return 正确的状态代码。成功时,只需渲染一个 JSON 和 id 属性 集。我相信 update_attributes
returns true
成功:
if scheduled_task && scheduled_task.update_attributes(...)
render json: { id: scheduled_task.id }
else
head :unprocessable_entity
end
首先,您需要改进您的控制器代码结构(您可以依赖默认的脚手架生成器方法)。然后,您必须指出您的方法将仅响应 json 格式,您想要 return 的答案,如下所示:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
if (scheduled_task && scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id]))
render json: { scheduled_task_id: scheduled_task.id }
else
render json: { error: l18n.t("error.messages.request_error") }
end
end
然后,您必须修改jquery ajax 请求的成功和失败响应方法。下面是它的外观示例:
$.ajax({
url: "/heimdall/update_scheduled_task",
method: "post",
data: { task_id: taskId, start_hour: startHour, end_hour: endHour, user_id: userId },
success: function(result) {
if (result["scheduled_task_id"] != null) {
console.log("Schedule record => " + result["scheduled_task_id"])
} else {
console.log("Error: " + result["error"])
}
},
error: function() {
console.log("Ajax request error");
},
// async: true => By default JQuery set true to async param.
});
不要忘记你需要在文件config/ruotes.rb中添加一个规则来访问这个方法,就像这样:
post update_scheduled_task, :defaults => { :format => 'json' }
希望对您有所帮助,问好!
我知道 Whosebug 上已经有很多关于此的问题,但其中 none 对我很有用。这是我的 ajax 代码:
function update_schedule($task){
var taskId = $task.data("taskId"),
startHour, endHour,
userId = $('#users').val();
if( !$task.hasClass('daily-task')){
startHour = getStartHour($task),
endHour = startHour + (+$task.data('time'));
}
console.log(startHour, endHour)
$.ajax({
url: '/heimdall/update_scheduled_task',
method: 'POST',
data: { "task_id": taskId, "start_hour": startHour, "end_hour": endHour, "user_id": userId },
success: function (){
console.log("SUCESS!!", data['head'])
},
error: function () {
console.log("FAILURE");
},
async: true
});
}
控制器代码:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id])
end
我想 return 找到或创建的任务的 ID。我不知道如何 send/receive 此信息。我已经阅读了有关 respond to 的内容,但我仍然不知道如何在这种情况下使用它。
您可以 render json: ...
到 return ajax 所需的信息 JSON 格式:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id])
render json: {scheduled_task_id: scheduled_task.id}
end
并且在 ajax 函数成功后,像这样使用它:
success: function (data){
var data = JSON.parse(data);
console.log(data["scheduled_task_id"]);
},
jQuery 的 success
和 error
回调依赖于由控制器编辑的状态代码 return。当您无法 create/read/update 对象时,请确保您 return 正确的状态代码。成功时,只需渲染一个 JSON 和 id 属性 集。我相信 update_attributes
returns true
成功:
if scheduled_task && scheduled_task.update_attributes(...)
render json: { id: scheduled_task.id }
else
head :unprocessable_entity
end
首先,您需要改进您的控制器代码结构(您可以依赖默认的脚手架生成器方法)。然后,您必须指出您的方法将仅响应 json 格式,您想要 return 的答案,如下所示:
def update_scheduled_task
scheduled_task = ScheduledTask.find_or_create_by(task_id: params[:task_id])
if (scheduled_task && scheduled_task.update_attributes(start_hour: params[:start_hour], end_hour: params[:end_hour], task_id: params[:task_id], user_id: params[:user_id]))
render json: { scheduled_task_id: scheduled_task.id }
else
render json: { error: l18n.t("error.messages.request_error") }
end
end
然后,您必须修改jquery ajax 请求的成功和失败响应方法。下面是它的外观示例:
$.ajax({
url: "/heimdall/update_scheduled_task",
method: "post",
data: { task_id: taskId, start_hour: startHour, end_hour: endHour, user_id: userId },
success: function(result) {
if (result["scheduled_task_id"] != null) {
console.log("Schedule record => " + result["scheduled_task_id"])
} else {
console.log("Error: " + result["error"])
}
},
error: function() {
console.log("Ajax request error");
},
// async: true => By default JQuery set true to async param.
});
不要忘记你需要在文件config/ruotes.rb中添加一个规则来访问这个方法,就像这样:
post update_scheduled_task, :defaults => { :format => 'json' }
希望对您有所帮助,问好!