gpt4 book ai didi

javascript - 条形码扫描器 Phonegap 插件;无法将结果保存到全局变量,或保存到隐藏字段

转载 作者:行者123 更新时间:2023-11-29 17:15:51 24 4
gpt4 key购买 nike

目前我正在开发一个 phonegap,它使用 Barcode Scanner 插件 (v 0.6.0) 和 phonegap 2.9.0。实际的条形码扫描仪工作正常,我可以让手机调出相机/扫描仪并读取条形码。我什至可以让 result.text 显示在一个简单的警报中(只要我在回调中这样做)。但是,如果我尝试将 results.text 的值保存到全局变量或隐藏字段中,该值在变量中未定义,并且在字段中为空。

我当前的代码

openBarcodeScanner();
var code = document.getElementById('barcode').value;
alert(code);

function openBarcodeScan(viewInfo){
var scanner = cordova.require("cordova/plugin/BarcodeScanner");
scanner.scan(function (result){
document.getElementById('barcode').value = result.text;
},
function (error){
alert ( error );
});
}

我很可能在做一些愚蠢的事情,但我这辈子都弄不明白。我更愿意使用全局变量,但隐藏字段是将 result.text 传递到回调之外的最后努力。

编辑:我猜这是因为异步回调,但我不确定如何在函数外获取 result.text。

最佳答案

.scan() 方法是异步的(当方法接受回调而不是返回值时,通常是异步的标志)。所以你提供给 .scan() 的第一个函数不会立即执行,因此它不会在你期望的时候设置值,也不会被你的外部代码检索到执行 alert(code);

因为您只需要它来发出 AJAX 请求,您不妨将请求放在 scan 回调中,例如:

scanner.scan(function (result) {
// Make AJAX request, using `result`
}, function (error) {
alert(error);
});

您还可以设置它,以便您的 openBarcodeScan 函数接受回调,并在扫描成功时运行该回调,例如:

function openBarcodeScan(viewInfo, callback) {
var scanner = cordova.require("cordova/plugin/BarcodeScanner");
scanner.scan(function (result) {
callback(result);
}, function (error) {
alert(error);
});
}

然后这样调用它:

openBarcodeScan("whatever", function (barcode) {
// Make AJAX request, using `barcode`
});

从技术上讲,您的功能可以简化为:

function openBarcodeScan(viewInfo, callback) {
var scanner = cordova.require("cordova/plugin/BarcodeScanner");
scanner.scan(callback, function (error) {
alert(error);
});
}

关于javascript - 条形码扫描器 Phonegap 插件;无法将结果保存到全局变量,或保存到隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18066858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com