jQuery移动自动完成不会显示我的websql数据

时间:2013-02-15 22:21:04

标签: jquery-mobile autocomplete web-sql

$("#username").autocomplete({

target: $('#usersss'),

source: function() {
            var db = decoara.webdb.db;

            db.transaction(function(tx) {
                tx.executeSql("SELECT codigo as value, fantasia as label, tabela FROM clientes WHERE fantasia LIKE '%"+$("#username").val()+"%' LIMIT 4",null, 

                    function (tx, results) {
                        jsonClientes = '[';
                        console.log('Rows:'+results.rows.length);

                        for (i=0; i<results.rows.length; i++) {
                            row = results.rows.item(i);
                            jsonClientes += '{"value":'+row['value']+',"label":"'+row['label']+'"}';

                            if (i!=results.rows.length-1)
                                jsonClientes += ',';
                        }
                        jsonClientes += ']';
                        console.log(jsonClientes);
                        return $.parseJSON(jsonClientes);
                    },function (tx, e) {
                        console.log('error: ' + e.message);
                    }
                );  
            });
        },
        link: 'xxx.html?ops=',
        minLength: 1
    });    

source的函数返回这个json代码:

 [{"value":27,"label":"NARDIM"},{"value":38,"label":"MORO"},{"value":39,"label":"MH"},{"value":40,"label":"IRMAO SAPIENZA"}]

但是列表视图似乎没有出现。当我使用相同的jSON数据将源更改为var时,它可以正常工作:

var autocompleteData = $.parseJSON('[{"value":27,"label":"NARDIM"},{"value":38,"label":"MORO"},{"value":39,"label":"MH"},{"value":40,"label":"IRMAO SAPIENZA"}]');

source: autocompleteData,

为什么?

2 个答案:

答案 0 :(得分:0)

尝试将jsonClientes声明为数组,然后使用.push将值存储在其中。 即

var jsonClientes = [];
                        console.log('Rows:'+results.rows.length);

                        for (i=0; i<results.rows.length; i++) {
                            row = results.rows.item(i);
                            jsonClientes.push ('{"value:"'+row.value+'",label:"'+row.label+'"},');
                        }

答案 1 :(得分:0)

数据库内容发生异常。调用.autocomplete()时,&#34; source&#34;被调用并在那里执行数据库查询。但是这个数据库查询tx.executeSql()将在以后的任何时候完成(async)和&#34; source&#34;自动完成的结果将不会有结果。

不幸的是我还没有找到如何为那些jquery插件解决这个问题,所以我继续围绕我的特定数据库查询构建自动完成。基本上,我从数据库查询开始,并为tx.executeSql()提供一个回调,它将填充我的自动完成下拉列表。