如何继续调用getjson,直到它没有空响应
How to continue calling getjson untill it has no empty response?
大家好,我收到了一个getjson调用,想知道如果它是空的或没有所需的字符串(例如查找seasonEpisode=),我如何检查它的响应(siteContents),然后再次调用getjson。我们可以从它内部调用getjsons本身吗?我的目标是从getjson中获得正确的响应。希望你们能帮助我。谢谢
$.getJSON('http://www.mysite.com/doit.php?value=55?', function(data){
//$('#output').html(data.contents);
var siteContents = data.contents;
试试这个:
var handler = function(data){
//$('#output').html(data.contents);
var siteContents = data.contents;
if (!siteContents) {
$.getJSON('http:/...', handler);
return;
}
// handle siteContents
}
$.getJSON('http://...', handler);
edit:在siteContents为空的情况下,上述操作会通过重复尝试向服务器发送垃圾邮件,从而产生无限循环和高负载。我建议两个改进:
1) 计算你重复的空站点内容循环的次数。在某个失败阈值(例如20次尝试)后,用错误消息(如果合适)取消循环。
2) 使用CCD_ 1进行迭代,其中重试之间的延迟是几毫秒。
听起来更好的问题是,为什么服务器在第一次尝试时不返回"正确"的响应?或者,正如NuclearGhost所指出的,为什么它会对同一请求返回不同的响应?
但要实现您所要求的,需要递归。不能只在循环中执行,因为响应是异步的。但是,如果您命名一个函数,您可以在成功处理程序中调用该函数,类似于以下内容:
function getJSONRecursive(maxRetries, count) {
if(!count) count = 1;
if (count > maxRetries) {
alert('Giving up after '+count+' retries.');
return;
}
$.getJSON('http://www.mysite.com/doit.php?', function(data) {
if(!data || !data.contents || data.contents.indexOf('seasonEpisode') == -1) {
getJSONRecursive(++count, maxRetries);
} else {
$('#output').html(data.contents);
}
})
}
然后像这样调用它:
getJSONRecursive(5);
我不建议在没有计数的情况下进行,因为否则,如果再也没有正确的响应,就会溢出堆栈。如果您要避免的情况是服务器超时或过载问题,那么我建议将递归调用设置为超时,如下所示:
if(!data || !data.contents || data.contents.indexOf('seasonEpisode') == -1) {
setTimeout(function() { getJSONRecursive(++count, maxRetries)}, 5000);
// etc.
这会在两次调用之间额外等待5秒,但额外的时间将有助于确保您的服务器不会崩溃,并且您的getjson调用不会很快用完。
相关文章:
- 如何将getJson的响应保存在全局变量中
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 使用getJSON填充动画响应图像网格
- 存储 $.getJSON() 响应到本地变量
- $.getJson() 响应限制
- 用于 json 和 jsonp 的 $.ajax 和 $.getJSON 无法正确获取来自第三方服务器的响应
- 如何格式化来自getJSON()jQuery调用的HTTP请求的HTTP响应
- $.getJSON在函数内部时没有响应
- 如何将两个getjson响应合并为一个变量,然后处理该变量
- 使用$.when()和.then基于$.getJSON响应更新数组
- 从函数返回getJSON响应
- 使用$. getjson()函数的空响应
- 如何防止jQuery's $.getJSON从转换我的ajax响应键从字符串到整数
- getJSON只响应明文,否则不起作用
- getJSON响应的问题
- jQuery $. getjson()方法失败时,响应是text/html
- $.getJSON - 在 url 中使用参数时无法捕获响应
- jQuery getJSON方法没有响应
- jQuery getJSON请求返回空响应-相同的域
- 如何显示AJAX/getJSON请求的错误(text.html)响应