我只是在为客户创建一个API来与我们的主要Rails 3应用程序进行交互。
对于一部分,我希望json响应包含一些表单。基本上是我们控制并在其网站上显示的一些表单代码。
我的工作正常(简化):
def login_form
@response = Form.find_by_something(params[:something_else])
if @response
render :status=>200, :json=>{:response => @response}
end
end
在客户端,我可以获取:
@logins = HTTParty.get("#{set_auth_url}/api/v1/logins.json?auth_token=xyz&something_else=abc").parsed_response
并显示表格
= @logins["response"].html_safe
问题是,表单代码有一些动态变量:
例如:
<div class="login">
<FORM name="form1" METHOD="get" action="<%= request.path %>?">
<INPUT TYPE="HIDDEN" NAME="chal" VALUE="<%= params['challenge'] %>">
<% if @current_location['success_url'] %>
<INPUT TYPE="HIDDEN" NAME="userurl" VALUE="/success">
<% end %>
<input type="hidden" name="UserName" placeholder="Username" value="<%= @user['username']['username'] %>">
<input type="submit" name="login" value="Login" class="btn">
</div>
我想知道这是不是一个好主意?如果是这样,我怎么能在html ??
中打破这些变量如果不是,有人可以推荐一种更好的方法来解决它。
答案 0 :(得分:1)
准备响应时,服务器端是否知道这些变量?在这种情况下,我会尝试通过模板引擎:json=> { :response => ERB.new(@response).result(binding) }
运行它们 - 客户端只会收到适用于他的情况的html。
答案 1 :(得分:1)
为什么不在Jquery Template或Mustache或Handlebar中使用Javascript模板
所以请将表单保留在客户端,如下所示
我将在这里使用Mustache来描述它 ....
...
<script id="template" type="text/template">
<div class="login">
<FORM name="form1" METHOD="get" action={{request_path}}>
<INPUT TYPE="HIDDEN" NAME="chal" VALUE={{challenges}}>
{{boolean_value}}
<INPUT TYPE="HIDDEN" NAME="userurl" VALUE="/success">
{{/boolean_value}}
<input type="hidden" name="UserName" placeholder="Username" value={{user_name}}>
<input type="submit" name="login" value="Login" class="btn">
</div>
</script>
</html>
下一部分是以ajax
的形式获得响应使用任何Javascript框架我想可以实现我在这里使用jQuery
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
// make ajax call over here
success: function(data) {
// JSON DATA
var template = $('script#template').html();
$([container where html is place]).html(Mustache.to_html(template,data));
}
})
})
希望这个帮助
不确定您希望如何使用form_tag的普通Form html标记intead,因为它不包含真实性标记
希望这个帮助