这次比较注重开发网站前端的经验,涉及rails与js之间消息传递,ajax等
1. rails与js间 结构传递
1.1 一般的对象传递,例如:
<script type="text/javascript“>
var content = <%= @result_from_rails %>
这种得到的结果通常为encode过的html,比如<显示为&lg
要想获得原始字符,stackoverflow上有过一个很好的解答:
var content = $("textarea").html( <%= @result_from_rails %>.text()
当然,html上可以完全没有textarea
1.2 Json对象的传递
开发时候遇到的麻烦:A为在rails 函数中需要返回的一个有结构的对象, puts A 可以看到一个清晰的json格式内容。希望在前台页面中通过ajax获取A,解析后展示。
ajax调用和解析,必然涉及javascript或jquery的工作,并且在js中也需要以json的格式去解析。此时需求:
Rails中
render :text => A.to_json
JS中
$.ajax({
.....
success : function( jsonData ){
var content = $.parseJSON( jsonData );
这样content在js中就为json对象,可以以content.attr来取值
2. Ajax Abort问题
遇到的麻烦:网络速度慢,在第一个ajax应答没有回来的时候就发出了第二个(参数不同)的ajax请求。此时用户希望看到的是第二次请求的结果,然而按照ajax顺序,会先展现第一次的结果,再展现第二次。而这两次展示的间隔可能较长,造成用户误认为结果为第一个返回值。
解决办法:将上一次的ajax请求abort掉,同时,在ajax的success中,判断返回数据是否not null
//定义全局变量
var current_ajax = null;
//判断是否abort
if (current_ajax){
current_ajax.abort();
current_ajax = null;
}
//定义ajax
current_ajax = $.ajax({ ...
success : function(){
if(curent_ajax){
//handle ajax response....