ajax响应返回,但有时不会触发任何操作或警报

时间:2011-05-31 04:27:15

标签: jquery ruby-on-rails ajax

我有一个相当标准的ajax请求,响应作为数组返回。 它在90%的时间内完美运行。

不幸的是,10%的时间,请求被发送,响应得到了返回,但没有显示,我甚至无法输出到警报。

Firebug显示响应没有错误。我可以在另一个窗口打开响应,这很好。我已经完成了响应,并没有看到任何明显的编码错误。虽然像st.paul这样的东西正在出现

st.paul\x92S.
正在从csv文件中检索返回的数据,该文件已从excel文件转换为csv。

它总是在相同的请求上失败。因此,90%的请求都是正常的,10%会失败而没有错误,但总是相同的10%。

我正在使用rails,输出由

生成
render ({:content_type => :js, :text => @col_data.uniq})

我得到了这样的csv,并删除了前导和尾随空格。也许我应该寻找剥离或编码其他角色?

    def csv_data
        csv=Dataset.find(session[:dataset_id])
        @csv_data = CSV.read(csv.dataset.path)
        @csv_data = @csv_data.each{|row| row.each {|col|col.to_s.strip!}}
        return @csv_data
    end

我在这里包含了输出,但它是一个很长的数组,我经历过它寻找nil或字符编码,但存在的编码肯定是逃脱的。

这个问题最初是作为一个ajax响应大小错误发布的,因为这是我看到的有效和无效之间的明显区别,但最初的评论让我相信大小不是问题,因为大回应不到45kb。

jquery ajax代码非常简单。我已经尝试过dataType:'json',而没有设置dataType。 返回数据时会触发“警报”,但是,在未返回数据的情况下,不会触发警报。然而,我可以在firebug中看到输出,因此它们是非错误响应。

var selected_field=jQuery('option:selected',this).text();
    jQuery.ajax({
        url: 'selectfilter',
        data: 'column_name='+selected_field,
        dataType: 'json',
        success: function(data){
                        alert(data.toSource());
            if(data.length==0){
            alert('the selected column has no data');
            }
            var list='';

            for (var i=0;i'+data[i]+'';
            }

            jQuery('table#sample_data').html(list).data('list',data);
            }
                  })

2 个答案:

答案 0 :(得分:3)

您是否尝试过以不同方式在控制器中呈现数据,例如“render:json => @ col_data.uniq”?

答案 1 :(得分:0)

您提到相同的10%的数据导致此问题。您是否注意到这些条目中的任何模式?您是否可以访问数据,是否创建了数据?

在我的工作中,我已经多次将现场更新的客户数据库从Excel导出到CSV,但是有许多额外的字符会在JavaScript中引发错误。 st.paul\x92S.看起来像是一个主要候选者,因为\ x92是打印机单引号的unicode,或者是HTML ’

我建议您尝试通过更改或删除“智能引号”来清理数据。另外,查看字段中是否还有其他额外字符。在Excel中几乎不可能注意到的一个特别恼人的角色是回车符(或换行符)。在文本编辑器中查看数据可能会有很大帮助。