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

Posted

技术标签:

【中文标题】条码扫描器Phonegap插件;无法将结果保存到全局变量中,或保存到隐藏字段【英文标题】:Barcode Scanner Phonegap plugin; Can't save results into global variable, or save to hidden field 【发布时间】:2013-08-05 20:12:06 【问题描述】:

目前我正在开发一个使用条码扫描器插件(v 0.6.0)和 phonegap 2.9.0 的 phonegap。实际的条形码扫描仪工作正常,我可以让手机调出相机/扫描仪并读取条形码。我什至可以让 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); 时对其进行检索 @Ian 有没有办法解决这个问题,还是我应该重新考虑我的方法? 嗯,没有办法修改同步行为,所以我认为你需要重新考虑你的方法。你的总体方法是什么?您只是在谈论能够在全球范围内获得价值,但您实际上想用它做什么? 我正在尝试将带有某些属性的结果作为字符串查询从对象发送到 URL。我现在正在查看 Jquery API,我想我可能能够使用 .ajaxComplete() 所以在.scan()第一个回调中,在那里写AJAX请求。您可以访问result,然后您应该能够访问您所说的任何这些对象属性 【参考方案1】:

.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);
    );

【讨论】:

【参考方案2】:

您需要将回调函数传递给 .scan() 以便在扫描意图完成后调用它们。你想要这样的东西:

scanner.scan(success,error);

function success(result) 
  document.getElementById('barcode').value = result.text;


function error(error) 
  alert(error);

【讨论】:

以上是关于条码扫描器Phonegap插件;无法将结果保存到全局变量中,或保存到隐藏字段的主要内容,如果未能解决你的问题,请参考以下文章

由于“转换为 dalvik 格式失败并出现错误 1”,PhoneGap 条码扫描器插件无法导出

iOS 上的 PhoneGap 条码扫描仪无响应

PhoneGap 条码扫描器插件 - 相机关闭

iOS PhoneGap 1.7.0 + 条码扫描插件问题

如何在条码扫描仪的移动 web 应用程序中集成 Phonegap 插件?

IOS - Phonegap - 条码扫描仪