0

我正在创建一个 phonegap 应用程序来获取联系人并将它们保存在数据库中。我在顶部创建了两个空的全局数组,它们将保存电话号码和一个人的显示姓名,稍后将存储在数据库表中。为了检查联系人是否成功保存在数组中,我创建了一个test_data()函数。

现在我的问题是test_data()代码不起作用,日志中没有显示任何值。现在,如果我将该代码从test_data()函数移到onSuccess()它可以正常工作。这是代码。这不是在 JS 中声明全局数组的正确方法吗?

<!DOCTYPE html>
<html>
  <head>
    <title>Contact Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-1.7.0.js"></script>
    <script type="text/javascript" charset="utf-8">
     var gcont = []; var gphon = [];

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Cordova is ready
    //
    function onDeviceReady() {

    // find all contacts with 'Bob' in any name field
    var options = new ContactFindOptions();
    options.filter=""; 
    options.multiple=true;
    var fields = ["displayName", "phoneNumbers"];
    navigator.contacts.find(fields, onSuccess, onError, options);
    test_data();
    }

    // onSuccess: Get a snapshot of the current contacts
    //
    function onSuccess(contacts) {


    for(var index=0;index<contacts.length;index++){ 
    gcont[index] = contacts[index].displayName; 
    gphon[index] = contacts[index].phoneNumbers[0].value; 

    }           


    }

    function test_data(){
    for (z=0;z<gcont.length;z++){
    console.log(gcont[z]);}
 }




    // onError: Failed to get the contacts
    //
    function onError(contactError) {
        alert('Error With Contacts!');
    }


    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Find Contacts</p>
  </body>
</html>
4

1 回答 1

2

对 test_data() 的调用在 onDeviceReady() 中不起作用,因为对 contacts.find 的 onSuccess 回调是异步的,并且在执行 test_data() 时尚未填充数组。

于 2012-05-06T10:51:57.070 回答