2011-05-19 83 views
0

我正在编写一个页面,该页面将打印成员的徽章标签。这是一个DYMO标签制作者,我正在使用他们的JavaScript标签框架。将jquery.get()设置为不起作用的变量

所有成员都与复选框一起列出,数据将被编码为值中的徽章。用户将检查他们想要打印徽章的成员,然后单击打印。

该脚本将抓取选中的复选框,并将该值通过get请求传递给单独的php文件,该文件将返回编码的数据,并且它会这样做。

要返回的数据是周期分隔的,我需要分割并将每个部分放在一个单独的行上。问题是我似乎无法从get的范围中获取数据。

脚本的相关部分:

printButton.onclick = function() { 
    try { 
     printButton.disabled = true; 
     settings.currentPrinterName = printersComboBox.value; 
     var printer = printers[settings.currentPrinterName]; 
     if (!printer) 
      throw new Error("Select printer"); 
     var label = null; 
     if (printer.printerType == "LabelWriterPrinter") { 
      label = addressLabel; 
     } 
     if (!label) 
      throw new Error("Label is not loaded. Wait until is loaded or reload the page"); 
     var labelSet = new dymo.label.framework.LabelSetBuilder(); 
     var barcode 
     $("#memchk :checked").each(function(){ 
      var value = $(this).val(); 
      var barcode; 
      var record = labelSet.addRecord(); 
      $.get("http://ranch/sunrise/wolf/plugins/member_directory/views/barcode.php",{encString: value}, function(data){ 
       //alert(data.split(".")); 
       barcode = data.split("."); 
      }); 
      alert(barcode[0]); 
      record.setText("TEXT", barcode[0]); 
      record.setText("TEXT_1", barcode[1]); 
      record.setText("TEXT_2", barcode[2]); 
      record.setText("TEXT_3", barcode[3]); 
      record.setText("TEXT_4", barcode[4]); 
      record.setText("TEXT_5", barcode[5]); 
      record.setText("TEXT_6", barcode[6]); 
      record.setText("TEXT_7", barcode[7]); 
      record.setText("TEXT_8", barcode[8]); 
      var memName = value.split("^"); 
      record.setText("TEXT_9", memName[0]); 
     }); 
     //label.print(printer.name, null, labelSet.toString()); 
     saveSettings(); 
    } catch(e) { 
     printButton.disabled = false; 
     alert(e); 
    } 
    printButton.enabled = true; 
} 

我试过设置了进去每行文字,但它没有考虑。 get中的警报显示预期的数据,但如果我尝试运行它,则表示条形码未定义。如果我注释掉get并将标签的文本行设置为静态字符串,则它可以正常工作。

为什么我不能获取数据?

回答

4

,而不是GET,试试这个:

var barcode = $.ajax({ 
     url: "http://ranch/sunrise/wolf/plugins/member_directory/views/barcode.php", 
     type: "GET", 
     data: {encString: value}, 
     async: false 
    }).responseText; 

,你就会有分配您的要求的条形码,这:

 alert(barcode[0]); 
     record.setText("TEXT", barcode[0]); 
     record.setText("TEXT_1", barcode[1]); 
     record.setText("TEXT_2", barcode[2]); 
     record.setText("TEXT_3", barcode[3]); 
     record.setText("TEXT_4", barcode[4]); 
     record.setText("TEXT_5", barcode[5]); 
     record.setText("TEXT_6", barcode[6]); 
     record.setText("TEXT_7", barcode[7]); 
     record.setText("TEXT_8", barcode[8]); 

应该工作;)

+0

将“异步”设置为false,因此jQuery将返回当前的XmlHttpRequest实例 – metaforce 2011-05-19 14:30:02

+0

B-E-A-utiful,谢谢。 – Ryan 2011-05-19 14:46:15

+1

这比解决方案更像是创可贴。关闭ajax上的异步排除了ajax的用途......这可能会导致应用程序性能下降,因为它会锁定,直到请求实例返回。 – 2011-05-19 15:09:07

3

get是制作AJAX获取请求的简单方法。 AJAX是异步的(这就是A代表的)。这意味着请求被发送并且响应稍后回来。如果您希望在收到响应后执行,则您在get之后执行的所有操作都需要移入回调函数。

+0

http://api.jquery.com/jQuery。得到/ – epascarello 2011-05-19 14:25:51

+0

我已经看到了,并尝试过,但如果我尝试设置回调函数内的文本,它会完全忽略它们,即使我将它更改为“hi”。 – Ryan 2011-05-19 14:30:49

2

不知道是什么您正在使用的jQuery版本,但我会从这里的文档开始:

http://api.jquery.com/jQuery.get/

此外,这些都不是我的幻灯片(感谢丹赫伯登),但这里是一个回调的一个很好的例子:

http://danheberden.com/presentations/deferreds-putting-laziness-to-work/#4

所以你要确保你调用函数来处理你的数据从你的回调函数(带有条形码的部分= data.split(“。”))...上面的幻灯片还展示了如何使用Deferred对象以更简洁的方式链接多个回调。我建议你去通过这个和递延对象的文件位置:

http://api.jquery.com/category/deferred-object/

总之,你应该能够使用回调妥善解决你的问题,但对于一个更可读的解决方案,做检查出deferreds。

+0

这看起来非常有趣。在我把所有东西都运行起来之后,我会研究这个,谢谢。 – Ryan 2011-05-19 16:29:19