【问题标题】:ajax response get returned, but sometimes doesn't trigger any actions or alerts返回 ajax 响应,但有时不会触发任何操作或警报
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 绝对惊讶于它是如此简单,并且与我的调试方向完全无关。希望这可以节省我花费大量时间试图弄清楚的时间。
  • 嗨@pedalpete,我对stackoverflow 信誉系统还很陌生,并且对帮助而不是获得积分更感兴趣,但是我如何为我的回答赢得赏金?
  • 抱歉,我想当我接受答案时,它会自动给你分数。我自己是赏金的新手。
【解决方案2】:

您提到同样 10% 的数据导致了这个问题。您是否注意到这些条目中的任何模式?您是否有权访问数据?您是否创建了数据?

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

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

【讨论】:

  • 谢谢克里斯,我怀疑这是一个编码错误,但没有注意到输出中会导致完全崩溃的任何内容(正如我所提到的,输出非常大。但是,我没有无法访问 csv,它们是由用户上传的,所以我不能指望他们在上传之前“清理”数据。它们是正则表达式还是我可以在导入时对 csv 运行以清理字符这会导致它破裂吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多