Я пытаюсь решить, использовать ли пользовательский ASP.Net Ajax Extender или jQuery для выполнения простого вызова веб-службы. Метод веб-службы принимает идентификатор клиента и возвращает имя клиента. Я склоняюсь к jQuery из-за простоты. Единственная проблема заключается в том, что из-за настроек IE7 групповой политики моей компании, в первый раз JQuery вызывает веб-сервис, он предлагает пользователю со следующим сообщением:Как вы подавляете сообщения IE7 ActiveX с помощью javascript?
Скрипт обращающегося некоторое программное обеспечение (элемент управления ActiveX) на эту страницу , которая была помечена как безопасная для скриптов. Вы хотите это разрешить?
Расширитель не вызывает отображение этого сообщения. Я предполагаю, что в ASP.Net Ajax-библиотеке есть несколько javascript voodoo, которые подавляют его. Итак, мои вопросы: Как подавить это сообщение с помощью javascript?
Вот мой ASPX разметки:
<h1>
Finder Test</h1>
<div>
<h2>
Extender</h2>
Customer ID:
<asp:TextBox ID="txtCustomerId" runat="server" MaxLength="9" Width="4em" />
<belCommon:FinderExtender ID="extCustomerId" runat="server" TargetControlID="txtCustomerId"
ResultLabelID="lblResult" ServicePath="~/Customer.asmx" ServiceMethod="Name" />
<asp:Label ID="lblResult" runat="server" />
</div>
<div>
<h2>
jQuery</h2>
Customer ID:
<input id="txtCustomerId2" type="text" maxlength="9" style="width: 4em;" value="0000" />
<span id="txtCustomerName2"></span>
<script type="text/javascript">
$(document).ready(function()
{
$("#txtCustomerId2").change(
function()
{
updateCustomerDescription(this.value, "txtCustomerName2");
}).change();
});
function updateCustomerDescription(id, descriptionControlId)
{
// if we don't have a value, then don't bother calling the web service
if (id == null || id.length == 0)
{
$("#" + descriptionControlId).text("");
return;
}
jsonAjax("customer.asmx/Name", "{'id':'" + id + "'}", true,
function(result)
{
var name = result.d == null ? "" : result.d;
$("#" + descriptionControlId).text(name);
}, null);
}
function jsonAjax(url, data, async, onSuccess, onFailed)
{
$.ajax({
async: async,
type: "POST",
url: url,
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess,
error: onFailed
});
}
</script>
</div>
[Update]
Я предполагаю, что элемент управления ActiveX, указанный в сообщении является XMLHttpRequest. Я также предполагаю, что внутренности jQuery и ASP.Net Ajax используют его для IE7.
[Update]
Разница, как представляется, в том, как ASP.Net Ajax и JQuery построить экземпляр XMLHttpRequest.
ASP.Net Ajax (спасибо @Jesse Dearing):
window.XMLHttpRequest = function window$XMLHttpRequest() {
var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ];
for (var i = 0, l = progIDs.length; i < l; i++) {
try {
return new ActiveXObject(progIDs[i]);
}
catch (ex) { }
}
return null;
}
}
JQuery 1.3.2:
// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
// This function can be overriden by calling jQuery.ajaxSetup
xhr:function(){
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}
Оба варианта реализации ASP.Net Ajax и jQuery находятся на одной странице, и только сообщение вызывает метод jQuery. Я уверен, что обе реализации используют объект XMLHttpRequest ActiveX. – jrummell
Я бы посмотрел на источник страницы, а не на предположение. – jdigital