我正在创建一个游戏,其中将用户猜测发送到后端,在该游戏中进行评估,然后以数组的形式返回反馈。我正在使用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)
}
})
});
这是我的红宝石代码,它返回数组:
post '/guess' do
response = Guess.new(params)
@response = response.feedback.to_json
end
使用pry,我已经确认@response
变量为'[0,2]'
。我已经在JSONLINT中输入了此内容,其中说它是有效的JSON。但是,响应始终是jQuery ajax调用中的错误路由,我得到此错误:
状态500错误
我试图实施具有类似问题的其他堆栈溢出问题中提供的建议,但似乎无效。
这是我的日志。它在AJAX请求期间或之后不会更改。所有四个条目都发生在Ajax请求之前。
服务器日志
尝试:错误是发送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更改为常规变量。使用实例变量返回数据必须在视图中引起问题,因为ERB模板将实例变量用于特定目的。
response = Guess.new(params)
final_response = response.feedback.to_json