Javascript hasOwnProperty不起作用

Javascript hasOwnProperty不起作用,javascript,angularjs,json,http,Javascript,Angularjs,Json,Http,我从服务器获得了一个JSON对象({error:true}) 我试图检查对象是否包含键“error”,并且键是否存在,函数hasOwnProperty返回false 这是我的代码: $http({ headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' }, url: '/Modules/Partners/Mailing/SendMail.ashx',

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

我试图检查对象是否包含键“error”,并且键是否存在,函数
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


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


这可能是因为错误属性是继承的。查看有关hasOwnProperty和继承属性的更多信息

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


这可能是因为错误属性是继承的。查看更多关于hasOwnProperty和继承属性的信息

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

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

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

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

您的
成功
方法接收
字符串
数据,而不是
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,在控制台中,您将看到:


您的
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,在控制台中,您将看到:


我不知道为什么,但是像这样返回对象 序列化(“{\”错误\“:true}”)

而不是 序列化(“{'error':true}”); 或 序列化(“{error:true}”)


解决我的问题

我不知道为什么,但返回的对象如下 序列化(“{\”错误\“:true}”)

而不是 序列化(“{'error':true}”); 或 序列化(“{error:true}”)


解决我的问题

您可以使用操作符中的
检查对象/数组上是否存在属性。

它可以像这样使用数据中的“错误”
//将返回true

您可以使用操作符中的
检查对象/数组上是否存在属性。

它可以像这样使用数据中的“error”(错误)
//将返回true

只需注意,对于JSON对象,必须将键括在引号中,而不是单引号中,否则无效!!请注意,对于JSON对象,必须将键括在引号中,而不是单引号中,否则无效!!