我的网络应用程序必须处理并提供大量数据才能显示某些页面.有时,用户在服务器仍忙于处理页面时关闭或刷新页面.这意味着服务器将继续处理数据几分钟,然后将其发送给不再收听的客户端.
是否有可能检测到连接已断开并对其作出反应?
在这个特定的项目中,我们使用的是Django和NginX,或Apache.我认为这是可能的,因为Django开发服务器似乎通过打印Broken Pipe异常来响应已取消的请求.我很乐意让它引发我的应用程序代码可以捕获的异常. 看来JSP可以做到这一点. 那么node.js可以 在这里.
或者,我可以在相关页面上注册卸载事件处理程序,让它执行同步XHR,请求取消此用户的先前请求,并进行某种进程间通信以实现此目的.也许如果将较慢的数据处理交给另一个我可以更容易识别和杀死的进程,而不会杀死响应进程......
当客户端/浏览器取消挂起的HTTP请求时,似乎Node with Express继续处理请求.对于密集请求,CPU仍然忙于处理不必要的请求.
有没有办法要求Node.js/Express杀死/停止请求取消的这些待处理请求?
它给出的是,由于AngularJS 1.5 HTTP请求是容易变得特别有用的撤销通过调用$cancelRequest()
上$http
/ $resource
对象.
当暴露提供自动完成或搜索字段的结果的API方法时,可能会发生此类取消:在要自动填充的字段中键入或者键入aheaded时,可以取消先前的请求.
全局server.timeout
不能解决问题:1)它是所有暴露的API方法的先验全局设置2)取消请求中的持续处理不会被终止.
当客户端在发出HTTP请求时取消TCP连接时,我想停止在服务器上执行任何工作并返回空响应.什么HTTP状态代码应该返回这样的响应?
有没有人玩过Retrofit 2.0,特别是Call.cancel()方法?
什么时候触发它的最佳时机?我曾试着打电话给它onStop()
的Fragment
,但遇到了与调用一些问题的时候,屏幕显示被关闭被取消.我也试着给它onDestroy()
的Fragment
,但是这种方法不会取消获得的触发呼叫ViewPager
(例如标签之间的切换)
有没有人有这方面的实例?
我试图实现这个我的Loop repo:https: //github.com/lawloretienne/Loop
我想知道是否有一种取消AJAX请求的简单方法?
除了在客户端调用XMLHTTPRequest上的"中止"之外,有没有办法轻松停止服务器进程?服务器正在使用Apache.
谢谢
我在尝试取消表单提交时遇到了一些麻烦.我一直在关注这个教程(即使我没有制作登录脚本),它似乎对他有用.
这是我的表格:
<form action="index.php" method="post" name="pForm">
<textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
<input class="submit" type="submit" value="Publicera!" name="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是jquery:
$(document).ready(function() {
$('form[name=pForm]').submit(function(){
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
我已经在标题中导入了jQuery,我知道它正在运行.我的第一个想法是,它可能已经过时了,但它实际上是"一年前".
所以有人看到什么是错的吗?
提前致谢.
编辑:从我读过的最简单,最合适的方式中止提交是返回false?但我似乎无法让它发挥作用.我搜索了论坛,我发现了几个有用的线程,但没有一个真正起作用.我必须搞砸了.
我BackgroundWorker
通过WebClient.DownloadString
在循环内调用来使用a 来下载一些网站.我希望用户在下载内容时取消选项,所以CancelAsync
每当我发现CancellationPending
在循环中间打开时我都会打电话.
但是现在我注意到函数DownloadString
有时会冻结,所以我决定使用DownloadStringAsync
(所有这些都在创建的其他线程中BackgroundWorker
).因为我不想通过在调用之后退出循环和函数来重写我的整个代码,所以在调用DownloadStringAsync
之后我做了一个while循环,它什么也没做,只是检查一个变量bool Stop
,我在DownloadStringCompleted
事件处理程序时变为true 被叫或当用户请求取消操作时.
现在,奇怪的是它在调试版本上运行良好; 但是在第一个版本中,程序会在while循环中冻结,就好像它是主线程一样.
我有一个页面,其中有一个事件处理程序附加到onclick
事件.当事件触发时,它将文本框的内容传递给GET
请求.由于url不在同一个域中,因此我创建了一个脚本标记,并将url附加到其源代码中
elem.onclick=fire;
function fire()
{
var text=document.getElementById('text').value;
var script=document.createElement("script");
script.className="temp";
script.src="some url"+"?param="+text;
document.body.appendChild(script);
}
Run Code Online (Sandbox Code Playgroud)
现在如果该事件被触发并且多次我想取消所有先前的GET
请求(因为他们仍然可能正在接收响应)并GET
使用最新文本发出请求.但为此我需要取消之前的请求.我试过了
document.body.removeChild(script);
script.src=null;
Run Code Online (Sandbox Code Playgroud)
但这不起作用Firefox
(我正在使用Firefox 5
),虽然这适用于Google Chrome
.有人知道这些请求是否可以在Firefox中取消,如果是,那么如何?
更新
正如阿尔弗雷德所建议的那样,我曾经window.stop
取消过一个请求,但没有取消请求,而是将其挂起.这意味着当我查看firebug时,它看起来像是在发出请求,但是没有响应.
我已经启动了一个延迟线程,performSelector
但是用户仍然能够点击当前视图上的后退按钮,从而导致调用dealloc.当发生这种情况时,我的线程似乎仍然被调用,导致我的应用程序崩溃,因为线程试图写入的属性已被释放.为了解决这个问题,我试图cancelPreviousPerformRequestsWithTarget
取消之前的请求,但它似乎没有工作.以下是一些代码片段.
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?该方法myStopUpdatingLocation
在我调用执行请求的同一个类中定义.
多一点背景.我正在尝试实现的功能是查找用户位置,在该位置周围的某些位置搜索谷歌并在地图上显示多个注释.在viewDidLoad
我开始更新位置CLLocationManager
.如果我在超时时间内没有达到所需的准确度并且我正在使用a performSelector
来执行此操作,那么我会在6秒后建立超时.可能发生的是用户单击视图中的后退按钮,即使我的所有属性都已释放导致崩溃,该线程仍将执行.
提前致谢!
詹姆士