0

我正在尝试从通过 AJAX 调用的 Web 服务文件中获取用户数据列表。这是我的代码:

      <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

<script type="text/javascript">
    var param;
    var resultarr;

    $(document).ready(function () {    
        param = document.getElementById('MainCT_dtvJobVac_PIC').value;
        // Load countries then initialize plugin:
        $.ajax({
            type: 'POST',
            contentType: 'application/json;',
            data: '{keyword:' + JSON.stringify(param) + '}',
            dataType: 'json',
            url: 'SvcADUser.asmx/GetADUserList',
            success: function (result) {
                //alert(result.d)
                resultarr = result.d;
            }
        })

        // Initialize autocomplete with local lookup:

        $('#MainCT_dtvJobVac_PIC').autocomplete({                  
            source: resultarr
        });
    });
</script>

resultarr将输出具有此值的数组:

[ "Administrator", "Guest", "krbtgt", "phendy" , "Genin" ,  "Hendra" ,  "andri" ]

它抛出这个:

TypeError: this.source is not a function [Break On This Error] this.source( { term: value }, this._response() );

我需要在这里修复什么?我为此苦苦挣扎了 2 天,不胜感激。

4

2 回答 2

4

在 ajax 成功回调中移动自动完成初始化:

success: function (result) {
    //alert(result.d)
    resultarr = result.d;
    $('#MainCT_dtvJobVac_PIC').autocomplete({
         source: resultarr
    });
}
于 2013-05-14T12:30:27.450 回答
0

Ajax 调用是异步的。让我们检查您的代码:

$.ajax({ .... } ); // (1)

$('#MainCT_dtvJobVac_PIC').autocomplete({ ... } ) // (2)

自动完成初始化(2)发生在调用服务(1)之后,但不清楚AJAX请求是否成功并返回了响应。您很有可能使用空或未定义的数据初始化自动完成 - 当连接速度较慢或由于某种原因失败时,成功回调可能不会在设置自动完成时执行 (2)。正确的做法是在 AJAX 回调中初始化自动完成,因为这样就保证了响应数据存在:

 $.ajax({
    type: 'POST',
    contentType: 'application/json;',
    data: '{keyword:' + JSON.stringify(param) + '}',
    dataType: 'json',
    url: 'SvcADUser.asmx/GetADUserList',
    success: function (result) {
        resultarr = result.d;

        $('#MainCT_dtvJobVac_PIC').autocomplete({                  
            source: resultarr
        });
    }
})
于 2013-05-14T12:43:32.370 回答