AJAX 请求因 Sinatra 应用程序中的内部服务器错误而失败
AJAX request fails with internal server error in Sinatra app
我正在创建一个游戏,其中将用户的猜测发送到后端,在那里对其进行评估,然后返回数组形式的反馈。我正在使用 AJAX 从 Sinatra 后端检索数据数组。这是我的 javascript 文件中的相关调用:
$("#form1").submit(function(e) {
e.preventDefault(); // i've tried with and without this line
$.ajax({
type: "POST",
url: "/guess",
dataType: "json",
data: {
guessData: choices,
secret: sessionStorage.getItem('secretcode')
},
success: function(result) {
var response = JSON.parse(result);
var html = "<span>" + response + "</span>";
$('#response').append(html);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText)
}
})
});
这是我的 Ruby 代码,returns 数组:
post '/guess' do
response = Guess.new(params)
@response = response.feedback.to_json
end
使用 Pry 我已经确认 @response
变量是 '[0,2]'
。我已经在 JSONLint 中输入了它,它说它是有效的 JSON。但是,响应总是在 jQuery AJAX 调用中进入错误路由,我收到此错误:
status 500 error
我已经尝试实施其他具有类似问题的 Stack Overflow 问题中提供的建议,但似乎没有任何效果。
这是我的日志。在 AJAX 请求期间或之后它不会更改。所有四个条目都发生在 AJAX 请求之前。
server log
试一试:发送时出错 data
:
$("#form1").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/guess",
dataType: "json",
data: {'guessData': choices, 'secret': sessionStorage.getItem('secretcode')},
success: function(result){
var response = JSON.parse(result);
var html = "<span>" + response + "</span>";
$('#response').append(html);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText)
}
});
}
答案是我需要将实例变量@response 更改为常规变量。对 return 数据使用实例变量一定会导致视图出现问题,因为 erb 模板将实例变量用于特定目的。
response = Guess.new(params)
final_response = response.feedback.to_json
我正在创建一个游戏,其中将用户的猜测发送到后端,在那里对其进行评估,然后返回数组形式的反馈。我正在使用 AJAX 从 Sinatra 后端检索数据数组。这是我的 javascript 文件中的相关调用:
$("#form1").submit(function(e) {
e.preventDefault(); // i've tried with and without this line
$.ajax({
type: "POST",
url: "/guess",
dataType: "json",
data: {
guessData: choices,
secret: sessionStorage.getItem('secretcode')
},
success: function(result) {
var response = JSON.parse(result);
var html = "<span>" + response + "</span>";
$('#response').append(html);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText)
}
})
});
这是我的 Ruby 代码,returns 数组:
post '/guess' do
response = Guess.new(params)
@response = response.feedback.to_json
end
使用 Pry 我已经确认 @response
变量是 '[0,2]'
。我已经在 JSONLint 中输入了它,它说它是有效的 JSON。但是,响应总是在 jQuery AJAX 调用中进入错误路由,我收到此错误:
status 500 error
我已经尝试实施其他具有类似问题的 Stack Overflow 问题中提供的建议,但似乎没有任何效果。
这是我的日志。在 AJAX 请求期间或之后它不会更改。所有四个条目都发生在 AJAX 请求之前。
server log
试一试:发送时出错 data
:
$("#form1").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/guess",
dataType: "json",
data: {'guessData': choices, 'secret': sessionStorage.getItem('secretcode')},
success: function(result){
var response = JSON.parse(result);
var html = "<span>" + response + "</span>";
$('#response').append(html);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText)
}
});
}
答案是我需要将实例变量@response 更改为常规变量。对 return 数据使用实例变量一定会导致视图出现问题,因为 erb 模板将实例变量用于特定目的。
response = Guess.new(params)
final_response = response.feedback.to_json