簡體   English   中英

hasOwnProperty 不起作用

[英]hasOwnProperty does not work

我從服務器得到了一個 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

在此處輸入圖片說明

我認為問題出在您收到的 JSON 對象上。 事實上,關鍵不是error而是'error' 嘗試查看data.hasOwnProperty("'error'")有效。

您是否嘗試過使用if(data && data.error)而不是if (data.hasOwnProperty('error'))

可能是因為繼承了 error 屬性。 在此處查看有關 hasOwnProperty 和繼承屬性的更多信息

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

在此處輸入圖片說明

檢查從服務器發送的數據的內容類型。 它應該是 'application/json' 然后它被隱式轉換為 javascript 對象。 要檢查使用“typeof data”它必須是“object”否則如果它的字符串那么你需要使用JSON.parse將它解析為對象

我不知道為什么但是返回像 JsonSerializer.Serialize("{\\"error\\":true}"); 這樣的對象。

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

解決我的問題

您可以使用in運算符來檢查對象/數組上是否存在屬性。 它可以像"error" in data一樣使用 // 將返回 true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM