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

标签 javascript callback cordova phonegap-plugins barcode-scanner

目前我正在开发一个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() 的第一个函数不会立即执行,因此它不会在您期望时设置值,并且无法由您所在的外部代码检索执行警报(代码);

由于您所需要的只是发出 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/

相关文章:

java - 抄写员 - 同时进行多个回调

javascript - 如何在 Phonegap 中使用 angularJs?

cordova - 使用 cordova-plugin-file 时,chrome 中永远不会触发 filePluginIsReady 事件

javascript - css翻译后如何获取元素位置

javascript - 如何在 Promise 中抛出异常?

javascript - 错误: Cannot find module '@kyleshockey/object-assign-deep'

javascript - 异步 node.js 调用中的错误处理

javascript - 创建和测试单个 Javascript 嵌套函数

javascript - 使用递归进行异步循环: How to access push array data?

javascript - 将 Cordova 版本 9.0.0 降级到 8.1.2 不起作用