在Sinatra应用程序中,AJAX请求因内部服务器错误而失败

时间:2016-12-15 16:02:26

标签: jquery ruby ajax sinatra

我正在创建一个游戏,其中用户的猜测被发送到后端,在那里进行评估,然后返回数组形式的反馈。我使用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代码,它返回数组:

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

2 个答案:

答案 0 :(得分:0)

试一试:错误是发送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)
      }
    });
    }

答案 1 :(得分:0)

答案是我需要将实例变量@response更改为常规变量。使用实例变量返回数据必然会在视图中引起问题,因为erb模板将实例变量用于特定目的。

  response = Guess.new(params)
  final_response = response.feedback.to_json