我正在写一个会为会员打印徽章标签的页面。它是一个DYMO标签制作者,我正在使用他们的javascript标签框架。
列出所有成员的复选框,并在值中为徽章编码数据。用户将检查要为其打印徽章的成员,然后单击“打印”。
该脚本将获取已选中的复选框,并通过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中的警报显示预期的数据,但是如果我尝试以它的形式运行它,则表示条形码未定义。如果我注释掉get并将标签的文本行设置为静态字符串,那么它可以正常工作。
为什么我无法获取数据?
答案 0 :(得分: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]);
应该有效;)
答案 1 :(得分:3)
get
只是制作AJAX get请求的一种较短方式。 AJAX是异步的(这就是A所代表的)。这意味着发送请求并在稍后的某个时间返回响应。如果您希望在收到响应后执行get
,则需要将{{1}}之后的所有内容移动到回调函数中。
答案 2 :(得分:2)
不确定您使用的是哪个版本的jQuery,但我会从这里的文档开始:
http://api.jquery.com/jQuery.get/
这些不是我的幻灯片(感谢Dan Heberden),但这是一个很好的回调示例:
http://danheberden.com/presentations/deferreds-putting-laziness-to-work/#4
因此,您需要确保调用函数来处理回调函数中的数据(条形码= data.split(“。”)的部分...上面的幻灯片还显示了如何使用Deferred对象以更清晰的方式链接多个回调。我建议您在此处查看此延迟对象文档:
http://api.jquery.com/category/deferred-object/
简而言之,您应该能够正确地使用回调来解决您的问题,但是对于更易读的解决方案,请查看延迟。