Javascript递归setTimeout没有't使用返回的完整最终JSON
Javascript recursive setTimeout doesn't use full final JSON returned
我对URL进行递归调用,直到它返回成功或达到最大尝试次数限制。这是相关的代码,(可以说是缩小了):
function doSomething(numRetries) {
$.post('someURL', {retry: numRetries},
function (data) {
if (data.value == 1) {
displayResults(data.message, data.value);
} else if (data.value == "retry") {
setTimeout( function() { doSomething(data.retries) }, 1000);
} else {
displayResults(data.message, data.value);
}
},
"json"
);
}
如果对sumeURL的第一次调用返回数据,则执行displaySuccess。类似地,如果它返回另一个值(例如0),它将成功显示Failure()。
问题出在递归部分。在它开始重试之后,它会用递增的重试值再次调用doSomething(),但之后的任何返回数据都不会被使用。
因此,例如,当我在someURL内的重试超时为3时,我可以在firebug中看到:
post('someURL', 0) returns JSONified (value = "retry", retries = 1)
post('someURL', 1) returns JSONified (value = "retry", retries = 2)
post('someURL', 2) returns JSONified (value = 0, error = "Display this error!")
但是displayFailure中的alert()表示错误=未定义,即使值=0(不是"重试")。Firebug表示正在进行正确的JSON解析。
EDIT修改doSomething以更准确地反映现实,尽管这些更改不应引入任何不确定性,根据请求,以下是后调用的实际返回值:
{"success":"retry","retryCount":"1"}
{"success":"retry","retryCount":"2"}
{"success":0,"errormsg":"The request is taking longer than expected, but should be completed soon. Please try again in 15 minutes."}
最后是一个缩小的displayResults():
function displayResults(text, status) {
$('#dispElem').queue(function(next) { //this is so that fades happen around the text update, not before/during it; there may be better ways to do this
$('#dispElem').html(text);
if (status == 1) {
$('#dispElem').addClass("success");
} else {
// hide and show random elements
}
next();
}).fadeIn().queue(function(next) { //scroll to bottom; next(); });
}
Arrrgh。
最糟糕的情况是,我一直忽略了一个大写/小写的错误,直到被迫重新键入以缩小。
谢谢大家的评论,可以说,让我用一颗更细的牙齿重新梳理它。
相关文章:
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 返回JSON中的下标
- jQuery Map 从多个源返回 JSON 对象
- 如何在 Node.js 中返回 JSON 后停止代码流
- AngularJS:表单提交没有返回JSON中的值
- 使用ajax发送数据,返回json
- 从我的解析函数返回json
- 如何从脚本页面返回json数据
- 有些人有任何关于如何使用Modified Java Script Value处理返回Json(url)的示例
- 如何在html页面中从ajax返回json数据
- Ajax调用在本地返回json,但在服务器上运行时返回xml
- ajax调用返回JSON ParseError即使认为JSON看起来是正确的
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 如何通过C#返回JSON并用JavaScript进行解析
- 使用 AJAX 返回 json 数组
- 从 AJAX 命令返回 JSON 格式的响应
- 如何通过node中的请求返回JSON.js(从javascript)
- Node.js API 在终端中返回 JSON,但不在浏览器中返回 JSON
- 如何在支柱 2 中返回 JSON 数组
- Rhino:从 Java 中返回 JSON