【问题标题】:How to debug a jQuery AJAX call that is made to a Sinatra application?如何调试对 Sinatra 应用程序进行的 jQuery AJAX 调用?
【发布时间】:2013-05-16 22:15:05
【问题描述】:

我正在使用 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 无法识别 local.erb 的 erb 页面,或者如果 url 只是“本地”,则不传递参数(我已经检查过这个在控制台中),因此结果不会呈现在 local.erb 页面上。

ruby 代码是:

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

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

例如,在上面的 ruby​​ sn-p 中,如果 erb 是 local.erb,top 应该是 '/local' 而不是 'local/data'?如果只是“本地”,那么我该如何传递参数?

一如既往地感谢所有 cmets 和帮助。谢谢你。 jquery 或 api 调用没有问题,所以困难不在于那里。

【问题讨论】:

  • 长问题...你能添加一些错误吗?你能展示一些 curl 调用来澄清你在谈论哪些路线吗?
  • 如果你认为问题不是jquery,请把不相关的部分去掉
  • 使用 get '/local/data' do route 控制台显示:justpaste.it/2myi 并且 local.erb 页面没有返回错误,但所需的数据(区域、前缀、voice_rate 等)是未渲​​染。使用 get '/local' 没有任何反应,而 jquery url '/local',结果如下:justpaste.it/2mym 因为参数没有到达 api 调用。网址是问题的一部分。
  • 我的问题的主要部分是:我应该在 get '/local' do 脚本段中还是单独定义 jquery 的处理方式。如果单独如何确保在 local.erb 页面上以 html 呈现所需的结果?如果 jquery url(和 ruby​​)是“/local”,则不会进行 api 调用,因为未传递参数,如果它们都是“/local/data”,则传递参数但在 local.erb 页面上不会呈现任何内容。
  • 不确定我是否理解,您是在谈论拥有 /api 命名空间吗? JSON处理有问题吗?传递 JSON 有问题吗?

标签: ruby sinatra


【解决方案1】:

要调试这个,你可以试试:

  • 使用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

【讨论】:

  • 抱歉,我不确定如何执行您上面描述的操作......当我输入上面的字符串时,谷歌会搜索它,但我认为这不是我们想要的。
  • 这是我在 local.erb 页面 NoMethodError at /local undefined method `[]' for #<:badrequest:0x96274e8> 我确定问题与“路由" 或传递参数的 url:'/local' 或 '/local/data',如果后者,则参数到达,如果前者没有。所以问题仍然是,我认为,用 get 'local' do 段中的参数编写动作脚本是否正确,还是应该在不同的代码块中完成?
猜你喜欢
  • 2012-12-10
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2011-05-20
  • 2013-11-29
  • 1970-01-01
相关资源
最近更新 更多