我有一个相当标准的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); } })
答案 0 :(得分:3)
您是否尝试过以不同方式在控制器中呈现数据,例如“render:json => @ col_data.uniq”?
答案 1 :(得分:0)
您提到相同的10%的数据导致此问题。您是否注意到这些条目中的任何模式?您是否可以访问数据,是否创建了数据?
在我的工作中,我已经多次将现场更新的客户数据库从Excel导出到CSV,但是有许多额外的字符会在JavaScript中引发错误。 st.paul\x92S.
看起来像是一个主要候选者,因为\ x92是打印机单引号的unicode,或者是HTML ’
我建议您尝试通过更改或删除“智能引号”来清理数据。另外,查看字段中是否还有其他额外字符。在Excel中几乎不可能注意到的一个特别恼人的角色是回车符(或换行符)。在文本编辑器中查看数据可能会有很大帮助。