2012-04-03 8 views
0

ich habe diesen Code,Wie Zeichenfolge json in js oder jQuery

buildSelect: function (data) { 
    var response = $.parseJSON(data); 


    alert(response.length); 
    var s = "<select>"; 
    if (response && response.length) { 
    for (var i = 0, l = response.length; i < l; i++) { 
     var ri = response[i]; 
     s += '<option value="' + ri.CUSTOMS_ID + '">' 
      + ri.CUSTOMS_NAME + '</option>'; 
    } 
    } 
    return s + "</select>"; 
} 
        }, 

i Antwort erhalten möchten überprüfen, nicht null oder leer ist und erhalten Länge schreibe ich diesen Code response.length aber undifine
zurückkehren und Daten zurück

{"rows":[{"id":1,"cell":["1","بندرامام خميني","IMAM KHOMEINI PORT","True",null]},{"id":2,"cell":["2","آبادان","ABADAN","True",null]},{"id":3,"cell":["3","خرمشهر","KHORRAMSHAHR","True",null]},{"id":4,"cell":["4","بندرعباس","BANDAR ABBAS","True",null]},{"id":5,"cell":["5","بوشهر","BUSHEHR","True",null]},{"id":6,"cell":["6","تهران","TEHRAN","True",null]},{"id":7,"cell":["7","شيراز","SHIRAZ","True",null]},{"id":8,"cell":["8","دبي","DUBAI","True",null]}],"Page":0,"Total":0,"Records":0} 

ich will, wenn Zeilen nicht leer ist alles Kind in der Dropdown

plese mir helfen, danke

+0

suchen Sind Daten in Funktion (Daten) bereits ein JSON-Objekt? –

+0

Was meinst du mit 'leer'? das '' {} ''? – Engineer

+0

Wenn Zeilen nicht untergeordnete Beispiel ist [{"ID": 1, "Zelle": ["1", "بندرامام خميني", "IMAM KHOMEINI PORT", "True", null]}, .... – Pouya

Antwort

2

Das Problem ist, dass response keine length Eigenschaft hat. Allerdings response.rows als Array, tut:

var response = $.parseJSON(data); 

alert(response.rows.length); 

Sie dann einen Verweis auf response.rows retten könnte und verwenden, die für die Zukunft:

var rows = response.rows; 
alert(rows.length); 

var s = "<select>"; 
if (rows && rows.length) { 
    for (var i = 0, l = rows.length; i < l; i++) { 
    var ri = rows[i]; 
    s += '<option value="' + ri.id + '">' + ri.cell[1] + '</option>'; 
    } 
} 
return s + "</select>"; 
+0

ri.CUSTOMS_ID oder ri.CUSTOMS_NAME return undifine – Pouya

+0

@mohsen Ah. Das liegt daran, dass die Namen 'CUSTOMS_ID' und' CUSTOMS_NAME' nicht in JSON definiert sind. In jeder Iteration wird 'ri' nur zwei Eigenschaften haben - eine 'id'-Nummer und eine' cell'-Matrix. Vielleicht sind 'ri.id' und' ri.cell [1] 'genau das wonach Sie suchen. –

+0

@ Jonathan Lonowski: Danke – Pouya

1

$.parseJSON(data) gibt JavaScript-Objekt und keine Zeichenfolge zurück. Sie können die Länge eines Objekts nicht verwenden. Nach documentation wird $.parseJSON Null zurückgeben, wenn Sie nichts übergeben, eine leere Zeichenfolge, null oder undefiniert.

UPD: In Ihrem speziellen Fall, es ist genug, dass response zu überprüfen, ist nicht null (keine Notwendigkeit, die Länge zu überprüfen). Wenn Daten kein gültiger JSON sind, wird $.parseJSON(data) durch eine Ausnahme ausgelöst. Vielleicht möchtest du es auch fangen.

+0

es kann ein Array –

+0

@JibiAbraham Überprüfen Sie den Titel der Frage. – Engineer

+0

@Engineer - überprüfen Sie die Rückgabedaten der OP –

1

Sobald Sie die JSON-Zeichenfolge analysiert haben, erhalten Sie in diesem Fall ein Objekt in Ihnen var response. JavaScript-Objekte haben keine Längeneigenschaft. Wenn Sie nur nach einem Null- oder Leerwert suchen möchten, führen Sie einen oder mehrere der folgenden Schritte aus.

var data = "";//in case of null data 
if(!data){ 
    //do something 
} 

//or 
if(data === ''){ 
    //do something 
} 

Nun, wenn Sie überprüfen möchten, ob Ihr rows leer sind,

var data = { 
    rows:{} 
};//assuming an empty rows object 

if($.isEmptyObject(data.rows)){ 
    //do something 
} 
1

Da Objekt keine Länge Eigenschaft/Methode enthalten, und es gibt kein Sinn für die Länge des Objekts. Sie können Methoden und Eigenschaften jedem Objekt zuweisen, vor-geschrieben oder selbstdefiniert.

In Ihrem Fall versuchen, für Objektdaten/Eigenschaften, wie

für (Schlüssel) in Reaktion {

Check einiger Eigenschaften im Zusammenhang auf Tasten

}

Verwandte Themen