我有一个ColdFusion模板,它将通过ajax调用。 模板的超时时间如下:
<cfsetting showdebugoutput="true" requesttimeout="2" />
但是如果超时发生,我没有收到任何错误消息。有没有办法捕获超时并通过Ajax正确响应?
答案 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上的人们可以提供更多帮助。