【发布时间】:2011-05-31 04:27:14
【问题描述】:
我有一个相当标准的 ajax 请求,响应以数组的形式返回。 它在 90% 的时间里都能完美运行。
不幸的是,有 10% 的时间,请求被发送,响应被返回,但没有显示,我什至不能输出到警报。
Firebug 没有显示响应错误。我可以在另一个窗口中打开响应,这很好。我浏览了回复,没有看到任何明显的编码错误。虽然像圣保罗这样的东西正在出现
st.paul\x92S。正在从 csv 文件中检索返回的数据,该文件已从 excel 文件转换为 csv。
它总是在相同的请求上失败。所以 90% 的请求都能顺利通过,10% 会失败且没有错误,但始终是相同的 10%。
我用的是rails,输出是由
生成的 渲染({:content_type => :js, :text => @col_data.uniq})我得到这样的 csv,并去掉前导和尾随空格。也许我应该寻找剥离或编码其他字符?
定义 csv_data csv=Dataset.find(会话[:dataset_id]) @csv_data = CSV.read(csv.dataset.path) @csv_data = @csv_data.each{|row| row.each {|col|col.to_s.strip!}} 返回@csv_data 结尾我会在此处包含输出,但它是一个长数组,我已经通过它寻找 nil 或字符编码,但存在的编码肯定会被转义。
这个问题最初是作为 ajax 响应大小错误发布的,因为这是我看到的有效和无效之间的明显区别,但最初的 cmets 让我相信大小不是问题,因为大型响应小于 45kb。
jquery ajax 代码非常简单。我已经尝试过使用 dataType: 'json',并且没有设置 dataType。 返回数据时会触发“警报”,但是,在未返回数据的这些情况下,不会触发警报。然而,我可以在 firebug 中看到输出,所以它们是非错误响应。
var selected_field=jQuery('option:selected',this).text(); jQuery.ajax({ 网址:'选择过滤器', 数据:'column_name='+selected_field, 数据类型:'json', 成功:函数(数据){ 警报(data.toSource()); 如果(数据长度==0){ alert('选中的列没有数据'); } 变量列表=''; for (var i=0;i'+data[i]+''; } jQuery('table#sample_data').html(list).data('list',data); } })【问题讨论】:
-
我认为 ajax 响应上的 40kb 不会将其最大化。我认为你的问题出在其他地方。是什么让您认为它有文件大小限制?
-
你看到什么样的效果?请求是否中断?
-
必须使用 40kb 大小不是问题 - 我的 Ajax 响应通常大小超过 5 Mb(然后浏览器超时问题确实成为问题 - 通常通过将请求的功能关闭来解决这些问题spawn 然后使用客户端 javascript 调用来检查临时文件是否已完成写入)。
-
您是否尝试在 Ajax 调用中使用 'error' 属性?你能指定你的 jquery 版本吗?
-
您是否尝试过以不同的方式在控制器中呈现数据,例如使用“render :json => @col_data.uniq”?
标签: jquery ruby-on-rails ajax