Hop*_*You 3 javascript php browser ajax timeout
PHP脚本需要25秒才能完成(1人),而且流量高可能需要更长时间.我不希望浏览器超时(PHP不会 - 我set_time_limit(0);).
有人可以提供有关如何确保浏览器没有超时的示例代码(或者详细说明要做什么)?什么是最好的方法?阿贾克斯?
谢谢.
编辑:
Brian Graham说:"一旦javascript启动ajax请求,它就会一直运行,直到它完成,退出或出错.据我所知,如果用户离开页面,它甚至应该这样做."
那么,我可以简单地通过Ajax调用长PHP脚本,然后它会运行很长时间而不需要超时(即使脚本没有返回任何内容)?
这实际上取决于你的脚本正在做什么以及它发送回来的内容,但如果你可以使用AJAX,那将是最佳选择.它不仅会让您长时间运行请求,而且不会占用浏览器,让用户可以继续使用当前页面,直到请求完成.
我发现实现这样的事情的最好方法是设置ignore_user_abort并关闭时间限制.这样您就可以让脚本在后台运行.这样,当用户浏览您的站点时,脚本可以继续运行.他们甚至不必呆在同一页上.因此,您使用AJAX启动请求以启动它.在该脚本中有一个循环,用于更新用户会话的进度.
ini_set('session.use_cookies', 0); //don't spam the user with cookies for each session_start()
while( ... ) {
session_start();
//update status to the user's session
session_write_close();
//sleep or whatever
}
Run Code Online (Sandbox Code Playgroud)
显然,这不一定是循环.您可以在开始处理信息之前关闭会话,然后打开它,设置状态并再次关闭它.一次只有一个脚本可以访问用户的会话,因此您需要确保此过程不会将其绑定.
然后,您需要做的就是创建一个在您网站的页面上运行的脚本,让用户知道您正在做什么,并且/或者为他们提供文件/输出/等.
这样可以让用户在脚本运行时继续浏览您的站点,并且不会强迫他们坐在单个页面上,盯着加载指示器.