[英]Ruby - Sinatra: Asynchronously calling method with form input as parameter
我目前正在嘗試構建一個小部件,它將根據用戶名檢索藝術家列表。
Ruby方法需要一個username參數,然后進行API調用以檢索實際的字符串數組。
該網頁具有輸入字段,用戶可以在其中填寫他/她的用戶名。 我的目標是立即調用ruby方法並顯示藝術家列表。 我的問題是能夠使用實際的表單輸入作為參數。 我認為這對於params [:user]來說相對容易,就像在Sinatra post方法中完成的那樣。 事實證明,事實並非如此。
我嘗試了兩種JS方法並在以下方法之后直接調用該方法:onkeyup。
使用Javascript:
userChanged = function() {
var user = document.getElementById("username");
if (user.value.length != 0){
artists = #{RFCore::get_artists(:name => params[:user]).to_json};
art_list.innerHTML = artists
};
};
:的onkeyup
:onkeyup => "art_list.innerHTML = #{RFCore::get_artists(:name => params[:user])[0]}"
我用params [:user]替換了我能想到的所有變體,例如“#{user}”和user。
返回的錯誤是未定義的方法[]' for params[:user] and undefined local variable or method
用戶'用於“#{user}”和用戶。
也許有一個簡單的解決方案; 但是這種感覺開始蔓延到我身上,我的方法開始時是錯誤的。 我對任何其他實現這一目標的方式持開放態度。
據我所知,您正在動態生成JavaScript。 因此,當您的Ruby代碼生成它時,它會在您生成JavaScript代碼時評估RFCore::get_artists
表達式,而不是在用戶與Web頁面交互時。
如果是這種情況,我建議:
這是一個小型Sinatra應用程序,演示了這種方法:
require 'sinatra'
get '/' do
<<html
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function userChanged()
{
$.get('/get-artists',
{username: $('#username').val()},
function(data){
$('#artists').html(data);
});
}
</script>
User: <input id="username" type="text">
<button onclick="userChanged();">Look up</button>
<div id="artists"/>
html
end
get '/get-artists' do
"Generate here list for user #{params[:username]}"
end
請注意,上面的代碼只是一個例子。 生成的HTML都是錯誤的,沒有使用模板語言等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.