jQuery UI自动完成仅适用于一台计算机上的IE

时间:2015-02-04 17:59:02

标签: asp.net ajax json jquery-ui jquery-ui-autocomplete

我已经组装了一个页面作为概念验证,用于在文本框中键入值时从Active Directory(通过Intranet上的Web服务)检索匹配的用户名。它工作得很漂亮,但只能在我的工作站上,只能在IE(版本10)中使用。尝试过它的每个其他用户都会收到警报,"错误"这也是我在Chrome中尝试时获得的。我进一步验证了其他用户可以通过将Web服务URL直接粘贴到他们的浏览器中来实际检索数据,因此故障发生在获取数据和显示在表单之间。我唯一的想法是,可能有一些浏览器设置负责允许它工作,但我真的不知道那些可能是什么。

这是代码的样子:

        <div>
            <h1>Active Directory lookup</h1>
            <input name="txtADAccount" type="text" id="txtADAccount" style="width:400px;" />
        </div>
    </form>

    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.0.js"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.js"></script>
    <script type="text/javascript">

        $(function () {
            $("#txtADAccount").autocomplete({
                source: function (request, response) {
                    $.support.cors = true;
                    $.ajax({
                        crossDomain: true,
                        headers: { 'Access-Control-Allow-Origin': '*' },
                        url: "http://fetch.mycompany.com/ADUser/ADUserByAccountOrDisplayName/" + $('#txtADAccount').val(),
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                        dataFilter: function (data) { return data; },
                        success: function (data) {
                            var jsonData = JSON.parse(data);
                            // Filter out records where there is no email address
                            var jsonFiltered = jsonData.result.filter(function (row) {
                                if(row.mail != '') {
                                    return true
                                } else {
                                    return false;
                                }
                            });

                            response($.map(jsonFiltered, function (item) {
                                return { label: item.displayName + ' (' + item.mail + ')' }
                            }))
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert(textStatus + ': ' + errorThrown);
                        }
                    });
                },
                select: function (event, ui) {
                    // prevent autocomplete from updating the textbox
                    event.preventDefault();
                    $(this).val(ui.item.label);
                },
                minLength: 2    //minLength as 2, it means when ever user enter 2 character in TextBox the AutoComplete method will fire and get its source data. 
            });
        });
    </script>
</body>

只是寻找一些关于问题根源的提示。

更新:更新脚本链接到最新版本的jquery和jquery.ui导致它至少再工作一台以前没有工作的工作站。但是,它仍然没有在我尝试的任何其他机器上工作,并且显示的错误消息不一致。有时它只显示&#34;错误&#34;,其他时间&#34;错误:没有运输&#34;,其他时间&#34;错误:访问被拒绝&#34;。

更新2:在我能够使其工作的第二个工作站上,我注意到如果我使用其他帐户登录,我会收到错误:访问被拒绝&#34;信息。这令人费解......访问被拒绝到底是什么?它不是Web服务本身,因为任何用户都可以将Web服务URL放到他们的浏览器中,它将返回相应的json数据。

更新3:我刚刚发现将contentType更改为&#34; application / x-www-form-urlencoded;字符集= UTF-8&#34;导致它现在为其他几个用户工作,以及现在在Chrome中为我工作。它仍然不适用于至少两个用户,一个使用IE但没有任何消息,另一个仍然没有得到#34; Access被拒绝&#34;消息(我可能需要让他们尝试清除浏览器缓存)。我仍然感到困惑的是,无论contentType设置如何,为什么它总是对我有用。

0 个答案:

没有答案