(这个问题类似于 this one ,但它是针对使用 XMLHttpRequest 而不是 Comet 的 iframe。)
我正在开始这样的异步长轮询:
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.send();
如果我在内部执行此操作 <script>...</script>在头部,它会导致文档永远保持加载状态。 (我正在 Mac OS X 和 iPhone 上的 Safari 中对此进行测试,它是我需要支持的唯一浏览器)。
使用 DOMContentLoaded或 load事件将不起作用。
使用具有足够大 延迟的 setTimeout 将起作用。 0 不会,1000 会,100 有时会,而其他时候不会。我对此感到不舒服。
我发现唯一可行的方法是将两者结合起来:
document.addEventListener('DOMContentLoaded', function () {
setTimeout(function () {
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.send();
}, 0);
});
我想这暂时解决了问题,但我仍然担心它会在未来崩溃。//编辑:这也不能可靠地工作。
有谁知道更可靠的方法吗?
最佳答案
我不确定,但似乎如果浏览器显示它仍在下载,那是完全正确的 - 这不就是 Comet 编程的本质吗?服务器仍在发送未缓冲的内容,当它在 javascript block 中流式传输时,它会被执行,从而允许服务器将事件推送到客户端浏览器。
在 Ajax 早期(例如在 IE6 上,XMLHttpRequest 是一个单独的 ActiveX 对象)我希望浏览器不知道它仍在等待。
但在 Safari 4、Chrome、FX3.5 和所有现代浏览器中 XMLHttpRequest是内置的 - 它知道它仍在等待服务器仍然流式传输其内容,就像它与 <IFrame> 一样。
简而言之 - 我希望任何 Comet 方法都能显示浏览器仍在下载,因为它是。我希望您发现的任何变通办法都能在未来的构建中得到修复,因为 Comet 本质上是一种让服务器推送模型正常工作的 hack。
但是他们已经开始在 HTML 5 中构建真正的服务器推送支持。
移动Webkit是否支持HTML 5 draft event-source 标记了吗?如果是这样,您可以尝试一下。
然后你会得到这样的东西:
<!-- new HTML 5 tag supporting server-push -->
<event-source src="http://myPushService.com" id="service">
<script type="text/javascript">
function handleServiceEvent(event) {
// do stuff
}
// tell browser to fire handleServiceEvent in response to server-push
document.getElementById('service').addEventListener('event name', handleServiceEvent, false);
</script>
关于javascript - 加载 cometd /服务器推送 XMLHttpRequest 时停止浏览器 “throbber of doom”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735560/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty