2015-10-11 6 views
0

Я играю с картой JS Dymo. original example работает без проблем, но загружает XML, даже когда я не хочу кликать. Я переписан выполнить Dymo код только тогда, когда я называю его:ReferenceError: метка не определена в каркасе Dymo

<script type="text/javascript"> 
     function printnow() {    
       $.get("./cont.label", function(labelXml) { 
       label = dymo.label.framework.openLabelXml(labelXml); 
       }, "text"); 
       // open label 
       // set label text 
       label.setObjectText("MENO", "test"); 
       label.setObjectText("MUNKA", "test"); 
       label.setObjectText("DESCRIPTION", test); 
       // select printer to print on 
       // for simplicity sake just use the first LabelWriter printer 
       var printers = dymo.label.framework.getPrinters(); 
       if (printers.length == 0) throw "No DYMO printers are installed. Install DYMO printers."; 
       var printerName = ""; 
       for (var i = 0; i < printers.length; ++i) { 
        var printer = printers[i]; 
        if (printer.printerType == "LabelWriterPrinter") { 
         printerName = printer.name; 
         break; 
        } 
       } 
       if (printerName == "") throw "No LabelWriter printers found. Install LabelWriter printer"; 
       // finally print the label 
       label.print(printerName); 

     }; 
</script> 

К сожалению, после того, как я называю printnow(); Я получаю ReferenceError: label is not defined Где проблема?

+2

http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/ 14220323? S = 1 | 0.0000 # 14220323 –

+1

Этот '$ .get()' call is ** асинхронный **. Переменная 'label' не будет получать значение до тех пор, пока не будет завершен HTTP-вызов, но сам вызов' $ .get() 'немедленно возвращается. Поместите код, который подготавливает и печатает содержимое ** внутри ** обратного вызова. – Pointy

ответ

1

Сначала вы должны прочитать это one.

Одним словом, вы имеете дело с асинхронным кодом. Итак, это label.setObjectText("MENO", "test"); и остальная часть кода будет выполнена, до этого label = dymo.label.framework.openLabelXml(labelXml);.

Наконец, вы должны сделать что-то вроде этого:

<script type="text/javascript"> 
     function printnow() {    
       $.get("./cont.label", function(labelXml) { 
       var label = dymo.label.framework.openLabelXml(labelXml); 
       // open label 
       // set label text 
       label.setObjectText("MENO", "test"); 
       label.setObjectText("MUNKA", "test"); 
       label.setObjectText("DESCRIPTION", test); 
       // select printer to print on 
       // for simplicity sake just use the first LabelWriter printer 
       var printers = dymo.label.framework.getPrinters(); 
       if (printers.length == 0) throw "No DYMO printers are installed. Install DYMO printers."; 
       var printerName = ""; 
       for (var i = 0; i < printers.length; ++i) { 
        var printer = printers[i]; 
        if (printer.printerType == "LabelWriterPrinter") { 
         printerName = printer.name; 
         break; 
        } 
       } 
       if (printerName == "") throw "No LabelWriter printers found. Install LabelWriter printer"; 
       // finally print the label 
       label.print(printerName); 

       }, "text"); 

     }; 
</script> 

 Смежные вопросы

  • Нет связанных вопросов^_^