条码扫描器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 条码扫描器插件无法导出