听起来更好的问题是为什么您的服务器在第一次尝试时没有返回“正确”响应?或者正如 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 调用不会很快耗尽自己。