我需要帮助在与健身相关的Rails(4.1.8)应用程序中对JQuery / Ajax请求进行故障排除。当成员从下拉菜单中选择练习时,我想动态显示他/她上次练习时的数据。为此,我使用JQuery / Ajax从数据库中获取数据(Postgres 0.18.3)。我已经编写了一个有效的Ajax请求,但我无法弄清楚如何动态更改网址中的ID。我想将id存储在JavaScript变量中,以便在Ajax请求的URL中使用。
我有以下嵌套路线:
resources :members do
resources :strength_exercises
end
为我提供了样本锻炼记录的以下网址:
/members/1/strength_exercises/13
这是我工作的JavaScript / JQuery / Ajax代码的相关部分:
//Gets information about last strength exercise workout
function getLastExercisePerformance() {
var member_id = 1; //the logged in member
var exercise_id = $("#strength_exercise_strength_training_list_id").val(); //the exercise selected from drop-down menu
var workout_id = 13; //the last workout that included the selected exercise
var date_performed = $("#strength_date_perform");
// more variables here //
$.ajax({
dataType: "json",
url: "/members/"+member_id+"/strength_exercises/"+workout_id+".json",
success: function(data) {
date_performed.text(data.date_performed);
// handling more response data here
} // end callback
}) // end ajax request
} //end getLastPerformance function
JQuery下拉菜单更改事件:
// Gets data from last workout that included selected exercise
$("#strength_exercise_strength_training_list_id").change(function(){
$(".your_last_strength_exercise").show();
getLastExercisePerformance();
}); // end exercise change event
当我将id值硬编码到JavaScript / Ajax函数中时,一切都按预期工作。 Ajax请求成功:从数据库中检索所有需要的数据,并在Rails视图中正确显示。
以下是我迄今为止的故障排除工作的结果....
当我在Rails控制台中运行以下查询时:
@last_strength_workout = StrengthExercise.where(strength_training_list_id: 64, member: 1).last
我从数据库中检索我想要的数据:
=> #<StrengthExercise id: 13, sets: 3, reps: 15, weight: 310, date_performed: "2015-10-19", member_id: 1, created_at: "2015-11-24 20:29:20", updated_at: "2015-11-24 20:29:20", trainer_id: nil, muscle_group_id: 13, strength_training_list_id: 64, comment: "test", one_rep_max: 465.0, total_reps: 45>
当我在浏览器中输入以下网址时:
http://localhost:3000//members/1/strength_exercises/13.json
以json格式返回正确的数据: &#34; ID&#34;:13,&#34; member_id&#34;:1,&#34; muscle_group_id&#34;:13,&#34; strength_training_list_id&#34;:64,&#34;套&# 34;:3,&#34;代表&#34;:15,&#34; total_reps&#34;:45,&#34;重量&#34;:310,&#34; one_rep_max&#34;:465.0,& #34; date_performed&#34;:&#34; 2015年10月19日&#34;&#34; trainer_id&#34;:空,&#34; created_at&#34;:&#34; 2015-11-24T12 :29:20.668-08:00&#34;&#34;的updated_at&#34;:&#34; 2015-11-24T12:29:20.668-08:00&#34;&#34;评价&#34; :&#34;测试&#34;}
如何将必要的ID动态传递到Ajax网址请求中?我很感激有关如何最好地完成这项任务的任何帮助和指导。
答案 0 :(得分:1)
使用id =&#34; content&#34;
将您想要更改的内容换行传递所选的选项。
$("#list_id").change(function(){
var exercise_id = $('#list_id option:selected').val();
$.ajax({
url: "<%= get_workout_path %>",
type: "GET",
data: {"id" : exercise_id}
});
});
控制器
def get_workout
@exercise = Exercise.find(params[:id])
@workout = Workout.find(@exercise.workout.id)
end
get_workout.js.erb
$("#content").html("<%= j render 'content' %>");
_content.html.erb
content that you wanna change..
这通常就是我做的事。