自动完成的JavaScript变量范围

时间:2013-03-30 05:00:35

标签: jquery ajax autocomplete

我有一个如下所示的自动完成代码。它从ajax成功得到了正确的响应,但我不能在它下面的grep函数上使用响应变量。它说这是未定义的。如果我要使用全局变量,这种情况也是有效的。如何才能看到响应变量?

$( ".skl" ).autocomplete({
             source: function(req, responseFn) 
             {
                var re = $.ui.autocomplete.escapeRegex(req.term);
                var matcher = new RegExp( "^" + re, "i");
                var matcher2 = new RegExp( " " + re, "i" );

                $.ajax({
                    type: 'POST',
                    url: "http://somepage",
                    data: { skillType: 1, skillName: re},
                    success: function( response){
                        console.log(response);
                    }
                });

                var a = $.grep( availableTags, function(item,index){
                    return matcher.test((item)) || matcher2.test(item);
                });
                //var results = $.ui.autocomplete.filter(availableTags, req.term);
                responseFn( a.slice( 0,5) );

            },

            minLength: 1,
            autoFocus: true
        });

1 个答案:

答案 0 :(得分:1)

ajax是异步的。这意味着它会在加载内容之前立即继续运行您的代码(这是一件非常好的事情)。

您需要在成功函数中移动grep代码以及其他任何使用结果的代码。 A&#34;睡眠&#34;函数(这样的东西在JavaScript中不存在,所以我怀疑)对你没有帮助,因为在当前函数完成执行之前,JavaScript不会运行它的排队事件。这意味着ajax在仍然运行autocomplete功能时已经完成了不可能,即使你忙着(这是一件非常可怕的事情)。< / p>

由于您似乎需要响应以便在source函数中返回值,因此您需要更改您对事物进行思考的方式。例如,可以在内容更改时发送请求,并且其success函数将触发更新列表的项目。这也更具概念意义。