2011-10-02 51 views
0

我是web开发新手,任何帮助将不胜感激! 请给我任何想法,如果你有我的情况下面。Highcharts onclick事件中断我的Web服务请求。为什么?

所以这是情况。我有一个Web应用程序。 Web应用程序具有ascx页面和Web服务。我放了几张highcharts图表(客户端javascript图表库)。并参考Web服务的脚本管理器。因此,当文档准备好了(我使用jquery)我的javascript函数(我称之为makeUpdate())与设置的超时时间间隔1秒调用另一个JavaScript函数GetDataWrapper()。

GetDataWrapper函数是用于为图表返回数据的Web服务Web方法GetData()的封装器。你知道GetDataWrapper样子:

function GetDataWrapper() 
{ 
MyNameSpace.WebService.GetData(function (result, userContext, methodName) { 
// onSuccess may be do some new requests on something else 
}, function (error, userContext, methodName) { 
// onFailed alert error message 
}); 
} 

当然也是我把WebService.GetData方法的任何表达式的try/catch。

现在,如果我开始我的应用程序,我会得到一些延迟,我的图表将逐一接收数据,因为我有异步计算数据(这就是为什么我需要setTimeout并调用javascript makeUpdate()函数几次)。

所以,如果我只是等待我所有的图表将获得数据,那我需要!

但是!

我的highcharts有方法onClick重定向到'location.href = ....'为每个馅饼区域像这样的其他页面:http://jsfiddle.net/ggZ9Z/1/。所以如果我点击第一个饼图与数据,当其他人仍然wating数据我会得到GetDataWrapper()onFailed警报错误消息没有任何异常在WebService.GetData()(我把这种方式突破点)

我的问题是如何发生事件和调用我的函数onFailed在GetDataWrapper()没有例外的WebService.GetData()?

有什么建议吗?

无论如何,谢谢你的时间!

回答

0

我自己也有很多类似的问题。我没有任何正式的文件证明来指导你,但我会详细说明我通过不同的测试发现了什么。

调用onFailed回调的原因是,当您尝试将浏览器的位置设置为另一个页面时,当前页面正在被卸载,在这种情况下,浏览器的本机XMLHTTPRequest对象中止正在进行的所有异步请求并设置状态的响应。在这种情况下,ASP.NET生成的用于处理Web服务请求的JavaScript代理类将调用onFailed处理程序。

我对这个问题的解决方案是通过修改原始的Sys.Net.WebServiceProxy来处理状态码'0'并调用'onCanceled'回调而不是'onFailed'来创建一个新的代理基类。该解决方案不方便,因为每个Web服务的每个代理类都需要手动生成。

也许有更好的解决方案,我不知道,如果有人有这样的解决方案,我会很高兴。

+0

“...XMLHTTPRequest对象中止正在进行的所有异步请求,并将响应的状态设置为0“我的想法同样如此 – user956669