2011-11-10 59 views
1

我在索引查看查找控制器上有以下HTML下拉框。我想根據Dropbox的選擇更新視圖。我需要以某種方式將選擇傳遞給控制器​​。使用Rails 3.1中的JQuery下拉框發佈到控制器

<!-- index.html rendered from Search/Index --> 
<select id="search_params" name="search[params]"> 
    <option value="tacos">tacos</option> 
    <option value="pizza">pizza</option> 
</select> 

搜索控制器代碼採用PARAMS和吐出消息

def index 
    query = params[:search] 
    msg = "Your favorite food is #{query}! OMGWTFBBQ!?!?!?!" 

    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

這個Javascript應該以某種方式被選擇後,發佈下拉框選擇控制器:

$("#search_params").change(function() { 
    var state = $('select#search_params :selected').val(); 
    if(state == "") state="0"; 
    //Send the selection to the controller Search controller somehow 
    // and then render a new view immediately ? 
    //I AM NOT GOOD WITH COMPUTER 
}) 
return false; 
}); 

我我看了很多其他的Rails + JQuery示例,jQuery API文檔等等。無法找到簡單問題的答案或者我只是過度王。

無論如何,在此先感謝您的幫助! 〜Dan

回答

1

我不是Ruby/Rails的人,但我知道jQuery。

我想你想要像

$("#search_params").change(function() { 
    var state = $('select#search_params :selected').val(); 
    if(state == "") { 
    state="0"; 
    } 
    //Call jQuery AJAX 
    $.ajax({ 
     url:'/path/to/your/controller/action', 
     type:'POST', 
     data:'search=' + state, 
     success: function(data) { 
      alert(data); 
     }, 
     error: function() { 
      alert('Stuff went wrong'); 
     } 
    }); 
    return false; 
}); 

希望這有助於,並有jQuery AJAX doc page的讀取。

我不太清楚你是如何從控制器返回你的數據呢?是否有相應的視圖呈現msg

1

結帳jQuery.ajax()文檔:http://api.jquery.com/jQuery.ajax/

你可能需要把這個在application.js中的頂部(或這可能只是一個Rails 2.x的要求):

// Place your application-specific JavaScript functions and classes here 
// This file is automatically included by javascript_include_tag :defaults 
jQuery.ajaxSetup({ 
    'beforeSend': function(xhr){ 
    xhr.setRequestHeader("Accept", "text/javascript"); 
    var token = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
    } 
}); 

我設置jQuery.ajax()以期望服務器響應中的原始JavaScript代碼。

我有我的正常html模板呈現部分。或者,所有的HTML都被抽象爲部分,而不是模板。

JavaScript的模板將呈現基本上做到這一點:

$("div#some_id").html(
    <%= escape_javascript(render(:partial=>'partial_name')) %> 
); 
相關問題