在ColdFusion模板中捕获requesttimeout

时间:2012-11-28 09:10:08

标签: coldfusion

我有一个ColdFusion模板,它将通过ajax调用。 模板的超时时间如下:

<cfsetting showdebugoutput="true" requesttimeout="2" />

但是如果超时发生,我没有收到任何错误消息。有没有办法捕获超时并通过Ajax正确响应?

3 个答案:

答案 0 :(得分:2)

  

我没有收到任何错误消息

你有什么回报吗?您的回复应该仍然包含ColdFusion生成的文本。您是否使用过Chrome或火灾或任何带有网络工具的浏览器,这些工具可以让您查看响应,看看您是否只是找回了一些您无法使用的内容?您是否正在使用具有成功/失败回调功能的任何东西,可能会抑制客户端的故障?如果以下建议无效,我会发布您的JS并重新标记您的问题。

话虽如此:在请求超时到期后你做任何事情都要延长你的超时时间。 onError和try / catch在超时后只有几个MS来响应错误,因此发送消息或记录错误也将失败。如果您尝试发送电子邮件或写入文件,那么您的CF错误消息会说您的cfmail或cffile操作超时了(技术上)但它不是导致初始错误的原因。

如果您知道超时已经存在,您可以简单地将requestTimeout重置为更大的值。

<cfsetting requesttimeout="2">
<cftry>
    <!--- some stuff that takes more than 2 seconds --->
    <cfcatch type = "any">
        <cfsetting requesttimeout="5">
        <!--- logging / error handling for timeout --->
        <!--- NOTE!! This does not add 5 seconds, it adds 3.  --->
        <!--- The value of requestTimeout is the total time of the timeout. --->
    </cfcatch>
</cftry>

如果您不知道当前的超时值,也可以添加时间。

<cftry>
    <!--- some stuff that takes more than your timeout --->
    <cfcatch type = "any">
        <!--- You must first create your object to hold the requestMonitor. --->
        <cfset monitor = createObject("java", "coldfusion.runtime.RequestMonitor") />
        <!--- Then you need to reset your request timeout --->
        <!--- add 5 seconds to the timeout --->
        <cfsetting requesttimeout=monitor.getRequestTimeout()+5>
        <!--- logging / error handling for timeout --->
    </cfcatch>
</cftry>

您也不必在try / catch块中执行此操作,如果在application.cfc中定义了一个,则可以在onError事件处理程序中包含此内容。

答案 1 :(得分:0)

如果ColdFusion模板位于有Application.cfc文件的文件夹中,您可以使用onError函数执行某些操作。

答案 2 :(得分:0)

您应该在cftry块中包装由AJAX调用的整个ColdFusion模板。这样,如果发生任何ColdFusion异常,您可以处理它并将您想要的任何消息返回给客户端。

<cftry>
    <!--- all of your ColdFusion template code here --->
    <cfcatch type="Any">
    <!--- return whatever you want here --->
        <div>An error has occurred.</div>
        <!--- remember that you have the cfcatch structure available to you --->
        <!--- which contains the specifics of the error that was thrown     --->
    </cfcatch>
</cftry>

在客户端,进行AJAX调用的地方,您可以处理可能发生的任何与http连接相关的错误(连接失败,超时等)。你的AJAX调用将有一个错误方法或类似的。我强烈建议使用jQuery。 jQuery AJAX API

您没有在帖子中提供任何具体信息。如果您遇到问题,实际共享您遇到问题的代码总是有帮助的。那么StackOverflow上的人们可以提供更多帮助。