2012-04-01 4 views
1

nehme an, ich habe eine Config-JavaScript-Datei zu lesen:

window.Config = {}; 

Config.UI = { 
    "Area": {}, 
    "Layer": {}, 
    "Sprites": {}, 
    "Audio": {} 
}; 

Config.UI.Area = { 
    "prop": { 
     "uuid": { 
      "_type": "string", 
     }, 
     "frame": { 
      "_type": "rect", 
      "_value": { 
       "x": "0", 
      }, 
      "_aka": "frame" 
     }, 
     "zIndex": { 
      "_type": "string", 
     } 
    }, 

dann will ich .ajax $ verwenden diese Datei zu lesen:

 $.ajax({ 
      url:'js/config.js', 
      success:function (data, textStatus) { 
       console.log(data); 
      } 
     }) 

die Frage ist, wie kann ich einen Schlüssel Wert in der Config, durch die Verwendung der Daten $ .Ajax Return?

wie die "Config.UI" oder die "UUID" in ui.area.prop Oder kann ich sie in JSON konvertieren?

Antwort

0

Ich finde es sehr nützlich und leistungsfähig, um Daten auf dem Server als JavaScript-Objekte zu speichern und sie mit Ajax zu lesen. Und es ist sehr einfach zu machen. Lassen Sie mich Ihnen ein Beispiel aus einer von mir verfassten Bildungsanwendung geben.

Dies ist ein Beispiel Inhaltsverzeichnis-Datei (l1contents.js), die ich auf dem Server speichern würde:

{ 
    title : "Lesson 1", 
    topics : [ 
     {name : "Topic 1", file : "l1t1data.js" }, 
     {name : "Topic 2", file : "l1t2data.js" }, 
    ] 
} 

Dies ist der Javascript-Code, den ich die Datei zu verarbeiten verwenden:

$.ajax({ 
     url : contentsFileName, // would be set to 'l1contents.js' 
     dataType : 'text', // yes this is correct, I want jquery to think this is text 
     cache : false, 

     success: function(data) { 
      var contentsObj = eval('(' + data + ')'); 
      var lessonTitle = contentsObj.title; 
      for (var i = 0; i < contentsObj.topics.length; i++) { 
       var topic = contentsObj.topics [i]; 
       // process topic.name and topic.file here 
      } 
     } 
    }); 

Offensichtlich ist dies vereinfacht, aber hoffentlich bekommen Sie die Idee. Ich benutze eval einfach um das Objekt zu setzen. Und beachte, dass ich nicht einmal Javascript Code benötige, der die Struktur von contentsObj definiert. (Ich habe natürlich umfangreiche Kommentare, die die Struktur meiner Objekte definieren, aber sie sind einfach Kommentare, nicht Code.)

5

Anstatt AJAX zu verwenden, warum nicht einfach ein Skript einfügen?

var script = $('<script>'); 
script.attr('type', 'text/javascript'); 
script.attr('src', 'js/config.js'); 
script.bind('load', function() { 
    // use window.Config 
}); 
script.appendTo('head'); 
+0

+1 Ja, ich stimme dieser Antwort zu. Verwenden Sie keine Ajax, um eine Skriptdatei zu laden. Das Einfügen von Skript-Tags macht alles automatisch. – jfriend00

+1

Sie wissen zufällig, dass es in jQuery eine ['getScript()'] (http://api.jquery.com/jQuery.getScript/) Funktion gibt, richtig? – Joseph

0

wenn Ihre JSON-Datei enthält JSON-Daten, als Sie parseJSON(), toJSON() -Methode verwenden können.

und eine andere Lösung ist Verwendung eval(), diese konvergieren JSON-Daten zu Javascript-Objekt, so dass Sie einfach einen Wert erhalten, indem Sie den Schlüssel geben.

1

icktoofay hat einen guten Vorschlag, und das Problem mit dem Aufruf jQuery.ajax scheint eine fehlende dataType: 'script' Option zu sein, die die Antwort auswertet und Ihnen Objektzugriff geben sollte. Vielleicht möchten Sie auch in jQuery.getscript() suchen.