2017-04-13 72 views
0

我的應用程序向服務器發送ajax POST,如果服務器驗證失敗,服務器將stringDictionary<string, object>返回給客戶端。如何確定json對象是否是序列化字典?

因此,如果服務器發送Dictionary然後系列化responseText是jQuery是收到類似

"{\"Key1\":[\"Error Message 1\"],\"Key2\":[\"Error message 2\"]}" 

我也有相應的可在客戶端responseJSON

$.ajax({ 
     cache: false, 
     type: 'POST', 
     url: url, 
     data: data    
    })    
    .fail(function (response, textStatus, errorThrown) {   
      if (response.status === '400') { 
       if ($.isArray(response.responseJSON)) { 
        $.each(response.responseJSON, function (index, value) { 
         //do something 
        }) 
       } 
       else if ($.type(response.responseJSON) === 'string') { 
         // do something 
       } 
      }    
     } 

當響應是字典時,.isArray方法返回false。我如何確定responseJSON是否爲Dictionary以及我如何循環?

注意
object該服務器發回

+0

的可能的複製[檢查如果一個值是在JavaScript對象(http://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript ) – Hamms

+0

JavaScript中沒有'Dictionary'類型。你得到一個JSON字符串的方式。一旦反序列化,你就有一個「對象」。 –

+0

你在做什麼沒有意義。將dataType設置爲json並使用成功處理程序處理已經是對象的數據。如果失敗,則responseText無效json或者有其他連接錯誤 – charlietfl

回答

0

你試圖解釋的反應,看看它最終被一個對象(或「詞典」)。如果響應看起來是JSON,並且它的結果也是一個對象(「Dictionary」),那麼您知道該字符串是一個對象(「Dictionary」)。

下面的代碼應該列出所有必要的技術,以便將它集成到您​​自己的代碼中。

var thatResponseJson = "{\"Key1\":[\"Error Message 1\"],\"Key2\":[\"Error message 2\"]}"; 
try { 
    var result = JSON.parse(thatResponseJson); 
    if (result instanceof Array) { 
     // An Array 
    } else if (typeof result === 'object' && thatResponseJson[0] === '{') { 
     // Usually an object 
    } else if (typeof result === 'string') { 
     // A string 
    } else { 
     // Neither an Array, some other kind of object, or a string 
    } 
} catch (err) { 
    // Not valid JSON 
} 
+0

沒有必要的大部分。設置'dataType:'json''時,'$ .ajax'會在內部驗證json。如果有效的json返回並且不存在CORS問題,將不會失敗。另外可以使用jQuery核心'$ .type()'工具..將返回對象vs數組與字符串http://api.jquery.com/jQuery.type/ – charlietfl

+0

對我來說很好! – Brian

相關問題