JavaScript 不考虑退出条件,而变量仍然等于输出条件

标签 javascript requirejs infinite-loop

我有一个提交到 JavaScript 的 HTML 表单,处理数据并将 POST 请求发送到 PHP 脚本。

var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                if(contentElt && xmlHttp.responseText) {
                    var ajaxData = JSON.parse(xmlHttp.responseText);
                    var processedResultCount = parseInt(ajaxData[0]);
                    totalResultCount += processedResultCount;

                    contentElt.innerHTML = "Date processed (month - year): " + recupMonth + " - " + recupYear + "<br/>Results processed: " + processedResultCount + "<br/>Total results processed: " + totalResultCount;

                    pageNum++;
                    writeMode = "a";

                    if(processedResultCount === 0) {
                        pageNum = 1;
                        recupMonth--;
                        if(recupMonth === 0 && recupYear > endYear) {
                            recupMonth = 12;
                            recupYear--;
                        }
                        else if(recupMonth === endMonth && recupYear === endYear) {
                            alert("Processing finished");
                            if(totalResultCount != 0) {
                                contentElt.innerHTML = "Total processed results: " + totalResultCount + '<br/><br/>&gt; <a href="amazon_keyword_stats.csv" title="Download CSV result file">Download CSV result file</a>';
                            }
                            return;
                        }
                    }

当我到达条件时

else if(recupMonth === endMonth && recupYear === endYear)

条件满足。 代码进不去。

继续递减月份,当它达到 -2 时,它仍然执行五次迭代,然后代码 arette 不提供 CSV 下载。

我不明白为什么会这样,有人会提供线索吗?

最佳答案

else if(recupMonth === endMonth && recupYear === endYear)

recupMonth、endMonth、recupYear 和 endYear 是同一类型吗?因为可能其中一些是字符串而不是数字,并且运算符“===”没有将它们视为相等。

如果您不确定,您可以尝试将它们解析为该条件下的数字(至少尝试一下是否可行):

else if(parseInt(recupMonth, 10) === parseInt(endMonth, 10) && parseInt(recupYear, 10) === parseInt(endYear, 10))

或者尝试不比较类型:

else if(recupMonth == endMonth && recupYear == endYear)

希望这对您有所帮助。

问候。

关于JavaScript 不考虑退出条件,而变量仍然等于输出条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684604/

相关文章:

java - 二分查找 - 显示结果

c++ - boost thread_group 无限循环

javascript - 奇怪的 Google map 行为 : Pop up boxes and zoom bar not displaying correctley

javascript - Angular JS - 具有自定义验证规则的字符串模式

javascript - 浏览器与AJAX功能的兼容性

javascript - 使用上下文菜单将选定的文本作为 Firefox 附加组件发送到 url

javascript - RequireJS 的异步特性

javascript - 通过RequireJS加载Jquery插件

javascript - 使用 Require.js 未定义 Handlebars

java - 如何安全地扫描整数输入?