2016-08-30 1 views
0

Wie kann ich eine modifizierte Vaild JSON-Daten-String aus den JSON-Daten aus dem Ajax-Aufruf erzeugen. Dies ist mit dataFilter erforderlich.mit DataFilter von jquery .ajax mit JSON-Daten

retData (Daten zurückgegeben) von Ajax-Aufruf ist:

{"8":"vacation","7":"birthday","5":"summer","4":"2013","3":"2014","6":"winter","2":"2015","1":"2016"} 

JS-Code:

'dataFilter': function (retData, json) { 
    console.log('retData='+retData); 
    data = []; 
    $.map(retData, function (value,key) { 
     console.log('indx=i'+key+', value='+value); 
     node = { 
      'id' : 'i'+key, 
      'text' : value, 
      'icon' : '/', 
      'data' : value,  //'metadata' : value, 
      'state' : {'opened' : false}, 
      'children' : true 
     } 
     data.push(node); 
    }); 
    console.log('final-data='+data); 
    return data; 
    //return JSON.stringify(data); 
} 

sondern ich bin immer Fehler in Browser-Konsole: Es scheint .map $ ist das Problem mit wenn er in 'dataFilter' ausgeführt wird, läuft er gut in 'success' Aufruf (aber das Plugin will unbedingt die Verarbeitung in 'dataFilter' durchführen)

TypeError: invalid 'in' operand a 
https://www.localhost.com/jscript/jquery/jquery-2.2.0.min.js 
Line 2 

Antwort

1

Die Argumente des dataFilters sind beide Zeichenfolgen pro docs. Sie müssen retData auf ein Objekt konvertieren, bevor Sie $.map auf sie anrufen:

'dataFilter': function(retData, json) { 
    data = []; 
    $.map(JSON.parse(retData), function(value, key) { 
     console.log('indx=i' + key + ', value=' + value); 
     node = { 
     'id': 'i' + key, 
     'text': value, 
     'icon': '/', 
     'data': value, //'metadata' : value, 
     'state': { 
      'opened': false 
     }, 
     'children': true 
     } 
     data.push(node); 
    }); 
    console.log('final-data=' + JSON.stringify(data)); 
    return data; 
    //return JSON.stringify(data); 
    }, 

Fiddle

+0

Ihnen danken. Ich lerne, und ich schätze Ihre Hilfe! – rajeev