使用jQuery AJAX进行JSON响应的轮询,在AJAX结果或JSON内容的基础上进行处理。
使用jQuery AJAX进行JSON响应的轮询,在AJAX结果或JSON内容的基础上进行处理。
我是一个初级到中级的JavaScript/jQuery程序员,所以非常希望能够提供具体可执行的示例。
我的项目需要使用AJAX轮询一个返回JSON的URL,其中包含要添加到DOM的内容,或者包含一个消息{ "status" : "pending" },表示后端仍在生成带有内容的JSON响应。这个想法是第一个对URL的请求会触发后端开始构建JSON响应(然后进行缓存),后续的调用将检查该JSON是否已准备就绪(如果是,则提供)。
在我的脚本中,我需要以15秒的间隔轮询这个URL,最长不超过1分30秒,并执行以下操作:
- 如果AJAX请求导致错误,请终止脚本。
- 如果AJAX请求成功,并且JSON内容包含{ "status" : "pending" },则继续轮询。
- 如果AJAX请求成功,并且JSON内容包含可用内容(即任何有效的响应,而不仅仅是{ "status" : "pending" }),则显示该内容,停止轮询并终止脚本。
我尝试了一些方法,但成功有限,我感觉它们都比必要的复杂。这里是一个我已经成功使用的骨架函数,用于一次发送一个AJAX请求,如果我从JSON响应中得到可用内容,则能够完成其工作:
// 发起AJAX请求 function ajax_request() { $.ajax({ url: JSON_URL, // JSON_URL是一个全局变量 dataType: 'json', error: function(xhr_data) { // 终止脚本 }, success: function(xhr_data) { if (xhr_data.status == 'pending') { // 继续轮询 } else { success(xhr_data); } }, contentType: 'application/json' }); }
然而,除非接收到包含可用内容的有效JSON响应,否则此函数目前什么也不做。
对于那些只是注释的行,我不确定该怎么做。我怀疑另一个函数应该处理轮询,并根据需要调用ajax_request(),但我不知道ajax_request()以最优雅的方式如何将其结果传递回轮询函数,以便可以适当地做出响应。
非常感谢任何帮助!如果需要更多信息,请告诉我。谢谢!