3

有人可以向我解释我做错了什么吗?

function navMenuIntervalCheck() {
    if (currentSiteUrl != "subsites/players.php" || currentSiteUrl != "subsites/itemshop.php") {
        $.ajax({
            url: currentSiteUrl,
            cache: false,
            success: function (dataForContainer) {
                $('#container').html(dataForContainer);
            }
        });
    }

    screenControlCheck();
};

setInterval(function () {
    navMenuIntervalCheck()
}, 5000);

当我运行我的网站时,它会刷新,即使currentSiteUrl==subsites/players.php

4

6 回答 6

10

x!='a' || x!='b'往常一样true,我猜你想要&&而不是||.

阅读||asOR&&as AND

MDN 中有关逻辑运算符的更多详细信息。

于 2013-04-09T20:36:14.607 回答
3

currentSiteUrl只能有一个值,因此始终至少有一个您要测试的值不相等currentSiteUrl,从而使if条件始终true.

我认为您打算使用&&或打算==使用||.

于 2013-04-09T20:36:41.623 回答
2

你的代码是这样说的:

当 currentSiteUrl 不同于 subsites/players.php 或不同于 subsites/itemshop.php 时刷新。

所以 subsites/players.php 确实不同于 subsites/itemshop.php

使用 && 代替 ||

于 2013-04-09T20:37:15.887 回答
2

看看你的 if 语句:

if (a != foo || a != bar)

让我们看看可能性:

  • a = 富。这将评估为 true,因为 != bar
  • a = 酒吧。这将评估为 true,因为 a != foo
  • a = 其他任何东西。这将评估为 true,因为 a != foo

您的 if 语句始终评估为 true。

正如其他人已经说过的,你想||&&.

让我给你一个逻辑规则,叫做德摩根定律。在学习如何建立良好的if陈述时,它真的很有用。

!(a || b) === !a && !b

!(a && b) === !a || !b

这就是说:“不是(一个事件或另一个)”与“不是一个事件而不是另一个”是一回事,而“不是(一个事件和另一个)”与“不是一个事件或不是另一个事件”是一回事其他”。

于 2013-04-09T20:38:14.430 回答
2

我知道这已得到解答,但认为使用您自己的代码添加一些附加信息可能会有所帮助。

如前所述,将逻辑运算符||to切换&&将起作用:

if (currentSiteUrl != "subsites/players.php" && currentSiteUrl != "subsites/itemshop.php")

但这是为什么呢?


使用||


如果第一个或第二个表达式中的任何一个为,则||逻辑运算符返回,并且仅当两者都为时才会返回。truetruefalsefalse

因此:

  • 如果currentSiteUrl != "subsites/players.php"true最终进入if街区

  • 如果currentSiteUrl != "subsites/players.php"falsecurrentSiteUrl != "subsites/itemshop.php"true你最终在if

永远不会有另一种情况,因为您的变量currentSiteUrl只能保存一个值,因此其中一个表达式将始终true导致您始终出现在if块中。


使用&&


&&另一方面,false如果第一个或第二个表达式是,则使用逻辑运算符返回,false并且只有当两者都是true时才会返回true

因此:

  • 如果currentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php"true你最终在if

  • 如果currentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php"false不会if块中结束

  • 如果你没有进入街区currentSiteUrl != "subsites/players.php"_falseif

永远不会有另一种情况,因为只有当两个表达式都存在true时,您才会最终进入if块中,而只要其中一个表达式存在false,您就不会。

于 2013-04-09T20:59:50.560 回答
0

您如何获得 currentSiteUrl。url 后跟 protocol:://domain

尝试使用以下属性获取 URL,然后匹配它

window.location.href

此 url 还将包括 http 或 https 和域名

于 2013-04-09T20:40:19.140 回答