如何调试对Sinatra应用程序进行的jQuery AJAX调用?

时间:2013-05-16 11:29:02

标签: ruby sinatra

我正在使用Ruby,Sinatra和Postgres。我正在使用Plivo api。

有一个搜索页面(search.erb),其中jQuery脚本从搜索框中收集数据,然后将其传递给查询api。

这是jquery:

$(".localsearch").click(function() {
        var country_iso = $("#local").val();
        var region = $("#region").val();
        var prefix = $("#prefix").val();
        alert(country_iso + ' ' + region + ' ' + prefix)
        $.ajax({
        type: "GET",
        url: "/local/data",
        data: { 'country_iso' : country_iso,  'region' : region,  'prefix' : prefix },
        success: function(data){
            window.location.href = '/local'
        }
      });
});

如果url是“/ local / data”,则传递参数但是Sinatra不识别erb页面是local.erb,或者如果url只是“本地”,则params不会传递(我已经检查了这个在控制台中)所以结果不会在local.erb页面上呈现。

红宝石代码是:

get '/search' do
    erb :search
end

get '/local/data' do
      #country_iso = 'US'
      #region = 'NY'
      #prefix = '646'
      country_iso =  params[:country_iso]
      region = params[:region]
      prefix = params[:prefix]
      p = RestAPI.new(AUTH_ID, AUTH_TOKEN)
      params = {'country_iso' => country_iso, 'region' => region, 'prefix' => prefix, 'limit' => 1}
      warn params.inspect   
      response = p.get_number_group(params)
      obj = response.last
      pp obj
      @stock = obj["objects"][0]["stock"]
      @region = obj["objects"][0]["region"]
      @prefix = obj["objects"][0]["prefix"]
      @voice_rate = obj["objects"][0]["voice_rate"]

      erb :local
end

我不确定这里到底出了什么问题,但我怀疑问题是如上所述,params通过的路线。我想我需要一个单独的部分来编写应该发生的事情,但我不知道该怎么称呼它或如何将它与get'/ local'sdo部分分开/包含它。

例如,在上面的ruby片段中,如果erb是local.erb,那么top应该是'/ local'而不是'local / data'?如果只是'本地'那么我如何通过参数?

非常感谢所有评论和帮助。谢谢。 jquery或api调用没有问题,所以难度不在那里。

1 个答案:

答案 0 :(得分:0)

要调试此功能,您可以尝试:

  • 使用console.log(...)代替alert(...)来跟踪请求处理(在请求之前,之后)
  • 尝试使用curl的终端上的浏览器进行jQuery Ajax调用,例如你可以试试: curl -X GET 127.0.0.1:9292/search -d "country_iso=US"并查看此请求是否正确进入操作

  • 引发调试异常以检查您是否通过了某个代码点,并在此处显示Sinatra日志的堆栈跟踪

您的第二个问题似乎是了解如何设置嵌套路线的问题:

尝试:

get '/local' do
  # ... setup your view instance variables here
  erb :local
end