我已经组装了一个页面作为概念验证,用于在文本框中键入值时从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设置如何,为什么它总是对我有用。