【问题标题】:hasOwnProperty does not workhasOwnProperty 不起作用
【发布时间】:2016-01-03 10:35:49
【问题描述】:

我从服务器获得了一个 JSON 对象 ({error:true})。

我尝试检查对象是否包含键“错误”并且该键是否存在,函数hasOwnProperty 返回false

这是我的代码:

$http({
        headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' },
        url: '/Modules/Partners/Mailing/SendMail.ashx',
        data: $.param({ contact: JSON.stringify(contact), body: partnerObject.mailTemplate.longValue, title: "" }),
        method: 'POST'
    })
    .success(function (data, status, headers, config) {
        console.log(data);
        console.log(data.hasOwnProperty('error'));

       if (data.hasOwnProperty('error')) {
           deferred.reject(contact);
       } else {
           deferred.resolve(contact);
       }
       //console.log(data)

    })
    .error(function (data, status, headers, config) {
        deferred.reject(contact);
    });

在控制台中我可以看到该对象包含“错误”键,hasOwnProperty('error') 返回false

【问题讨论】:

    标签: javascript angularjs json http


    【解决方案1】:

    我认为问题出在您收到的 JSON 对象上。事实上,关键不是error,而是'error'。试试看data.hasOwnProperty("'error'") 是否有效。

    【讨论】:

    • 请注意,对于 JSON 对象,您必须将键括在引号中,而不是单引号 "" 中,否则 ' ' 否则无效!!
    【解决方案2】:

    您是否尝试过使用if(data && data.error) 而不是if (data.hasOwnProperty('error'))

    这可能是因为错误属性是继承的。详细了解 hasOwnProperty 和继承属性 here

    【讨论】:

      【解决方案3】:

      您的success 方法接收String 数据,而不是JSON

      .success(function (data, status, headers, config) {
          var result = angular.fromJson(data);
      
          if (result.hasOwnProperty('error')) {
              deferred.reject(contact);
          } else {
              deferred.resolve(contact);
          }
          //console.log(data)
      })
      

      顺便说一句:如果是 JSON,在控制台中,你会看到:

      【讨论】:

        【解决方案4】:

        您可以使用in 运算符来检查对象/数组上是否存在属性。 可以这样使用"error" in data // 会返回true

        【讨论】:

          【解决方案5】:

          检查从服务器发送的数据的内容类型。它应该是 'application/json' 然后它被隐式转换为 javascript 对象。 要检查使用“typeof data”,它必须是“object”,否则如果它的字符串,那么您需要使用 JSON.parse 将其解析为对象

          【讨论】:

            【解决方案6】:

            我不知道为什么,但返回对象就像 JsonSerializer.Serialize("{\"error\":true}");

            而不是 JsonSerializer.Serialize("{'error':true}"); 或者 JsonSerializer.Serialize("{error:true}");

            解决我的问题

            【讨论】:

              猜你喜欢
              • 2017-06-29
              • 1970-01-01
              • 2021-06-11
              • 1970-01-01
              • 2023-03-12
              • 1970-01-01
              • 2012-07-04
              • 2017-05-23
              • 1970-01-01
              相关资源
              最近更新 更多