繁体   English   中英

JavaScript全局不保留范围? 创建自动完成的webservice json对象

[英]JavaScript global not keeping scope? creating an autocomplete webservice json object

您好我正在尝试自动填充城市列表,但返回的json对象未格式化用于自动完成,需要一个名为“label”的字段:“cityname”显示自动完成,所以我试图重新格式化json对象使用ajax调用并将其写入全局变量,问题是一旦ajax调用返回,我的jsData是[]一个空数组......我做错了什么? 为什么全局变量不保持值?

http://www.andymatthews.net/read/2012/03/27/jQuery-Mobile-Autocomplete-now-available

<script>
        $("#nec").bind("pageshow", function(e) {
            var jsData = [];

            $.ajax({
                   url: "http://localhost:8084/REST/resources/cities",
                   data:{},
                   type: 'GET',
                   crossDomain: true,
                   dataType: 'jsonp',
                   jsonp: 'jsonp',
                   jsonpCallback: 'jsoncallback',
                   error: function(error){
                       console.log(error);
                   },
                   success: function(result) {
                       for (i = 0; i < result.length; i++){
                             jsData.push({label:result[i].name, value:result[i]}); 
                        }
                        console.log(JSON.stringify(jsData));   
                       },
                });

            $("#textinput").autocomplete({
                target: $('#suggestions'),
                source: jsData,
                minLength: 1
            });

});
    </script>

我在JS方面有点新鲜,所以还有一些我还没有掌握的东西

你必须把

 $("#textinput").autocomplete({
     target: $('#suggestions'),
     source: jsData,
     minLength: 1
 });

在你的success()函数中。

因为, jsDatasuccess()内成为更新。 执行pageshow事件的匿名函数比执行success()更快。 因此,在该函数中, jsData保持为空。

您可以通过自动填充本身检索数据。 看这里

问题是jsData不是全局的,而是在匿名函数中作用域。

    var jsData = [];   // make that here.

    $("#nec").bind("pageshow", function(e) {

        $.ajax({
               url: "http://localhost:8084/REST/resources/cities",
               data:{},
               type: 'GET',
               crossDomain: true,
               dataType: 'jsonp',
               jsonp: 'jsonp',
               jsonpCallback: 'jsoncallback',
               error: function(error){
                   console.log(error);
               },
               success: function(result) {
                   for (i = 0; i < result.length; i++){
                         jsData.push({label:result[i].name, value:result[i]}); 
                    }
                    console.log(JSON.stringify(jsData));   
                   },
            });

        $("#textinput").autocomplete({
            target: $('#suggestions'),
            source: jsData,
            minLength: 1
        });

虽然,我不建议全球变量。 但是,如果它对你有用,那就是你的愿望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM