ruby / sinatra处理ajax请求但没有任何反应

时间:2014-08-30 14:10:46

标签: jquery ruby ajax sinatra

我正在尝试使用AJAX请求在同一页面中创建一个简单的应用程序来加载数据。

这是.rb代码:

get '/' do 
    erb :index
end

post '/ssearch' do
  if request.xhr?

    keyword = params[:key]
    items = extract_cse_info(keyword)

    erb :ssearch, :locals => { 'items' => items }
  else
    erb :index
  end
end

这里有layout.erb

加载的.js文件
$(document).ready(function(){
    $('.SR_title').hide();
    $('#msg').hide();

    $('.SR_box').hover(function(){
        $(this).find('.SR_title').toggle().stop(true, true);
        $(this).toggleClass('SR_box_hover');
    }); 

    $("#searchform").submit(function(){
            var   form = $("#searchform"),
         term = form.find( "input[name='key']" ).val(),
         url  = form.attr("action"); 
         $.ajax({
            type: "POST",
            url: url,
            data: term,
            success: function(msg){
            $('#msg').html(msg);
        }
        });

    });

这里有index.erb代码

<div class="search">
    <form method="POST" action="/ssearch" id="searchform">
        <input id="search" type="search" name="key" autocomplete="on" placeholder="search qui..." />
        <button class="submit" type="submit">Go!</button>
    </form>

    <div id="msg"></div>
</div>

和ssearch.erb执行一些东西。

<% i = 1 %>
<% items["items"].each do |x| %>
<div class="SR_box">
    <div class="SR_title">
        <h5>Title</h5>
        <a class="SR_box_fs fa fa-arrows-alt" href="#"></a>
    </div>
    <iframe class="iframe" src=<%= "#{x['link']}"%> sandbox="allow-same-origin, allow-top-navigation, allow-forms"></iframe>
</div>
<% end %>

当我得到/ all都没问题,但是当执行搜索时没有任何反应,浏览器只显示没有在ssearch.erb中创建的框架的表单。为什么? 只是提示显示一条服务器错误消息,上面写着:

  

http://localhost:4567 - &gt; / SSEARCH   NoMethodError - nil的未定义方法'each':NilClass:   ssearch.erb:2:在'block in singletonclass'中

1 个答案:

答案 0 :(得分:0)

哦哦哦,问题很简单(现在)。

Sinatra不接受jquery ajax请求中'data:'参数中的变量,你必须以这种方式写明(在我的例子中):

data: { term: form.find("input[name='key']" ).val()},

while before之前写道:

 term = form.find( "input[name='key']" ).val(),
...
data: term,

然后我用这种方式修改一下.rb文件:

 @keyword = params[:term]
    puts "keyword is  #{@keyword}"
    @items = extract_cse_info(@keyword)
   puts @items

    erb :ssearch, :layout => false

现在我在七个天堂,我喜欢成为这种情感的新手:)

再见