0

我使用 AngularJS 作为我的框架,还连接到 web 服务来获取一些 JSON 数据。我有以下代码:

$login.onlineLogin($scope.credentials).
    success(function (data, status, headers, config) {

        if (data !== null ) {
            console.log('Successful Login!');
            console.log('Returned data: ' + data);
        } else {
            console.log('Failed to Login...');
        }

    }).
    error(function (data, status, headers, config) {
        console.log('HTTP Error...');
    });

现在,当 HTTP 调用返回时,状态仍可能为 200:OK,但它返回的对象可能为空,例如在用户提供错误用户凭据的情况下。所以我期望在这种情况下发生的是,如果对象不为空,它将打印出“成功登录!” 然后打印出对象。

但是,现在发生的事情是我使用了一些假凭据,因此 web 服务返回 null。但仍然是“成功登录!” 被打印,然后在打印“返回的数据:null”之后......这没有意义。如果数据为空,它甚至不应该出现在那个代码块中?

4

3 回答 3

3

如果您不确定变量使用的类型是什么。

console.log(typeof variableName)

在您的情况下,您的问题可以使用

if (data != 'null') {
...
于 2015-08-25T06:41:20.937 回答
2

== 和 === 是有区别的。JavaScript 有严格(===) 和类型转换(==) 相等比较。

当两个字符串具有相同的字符序列、相同的长度和对应位置的相同字符时,它们是严格相等的。当两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。NaN 不等于任何东西,包括 NaN。正零和负零彼此相等。如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。如果两个对象引用同一个对象,则它们是严格相等的。Null 和 Undefined 类型是 ==(但不是 ===)。[即空==未定义(但不是空===未定义)]

if (data != null ) {
          console.log('Successful Login!');
          console.log('Returned data: ' + data);
        } else {
          console.log('Failed to Login...');
        }
于 2015-08-25T06:34:14.257 回答
2

代替

if (data !== null ) {
    .....
}

用这个

if(data) {
    ....
}

这将检查空字符串 ( "")、、null以及数字和。undefinedfalse0NaN

于 2015-08-25T06:35:21.917 回答