Кто-нибудь успешно использовал мастер веб-приложений ASP.NET с поддержкой AJAX в Delphi 2007 для выполнения вызовов ajax?Если так, то в чем секрет, чтобы заставить его работать.
Я спрашиваю по двум причинам.Во-первых, то, что я пробовал, похоже, не работает.Во-вторых, я интенсивно искал в Интернете и не видел примеров или обсуждений, которые подразумевали бы, что AJAX действительно работал в Delphi 2007 с ASP.NET 2.0.
Вот что происходит.Я создал приложение C # с поддержкой AJAX (и соответствующий веб-сервис C #), используя .NET 4.0.Все это было довольно просто, и оно работает, как и должно быть.
Я хотел бы вызвать те же самые WebMethods из приложения Delphi 2007 ASP.NET.К сожалению, в то время как клиент C # получает строки, возвращаемые из различных WebMethods от веб-службы, клиент Delphi 2007 получает [объект Object], и у него, похоже, есть два неопределенных свойства.Я говорю это потому, что следующий код, когда он используется для получения результата, отображает окно предупреждения, в котором отображается «undefined undefined».
function ShowObjectInfo(result) {
var Name;
var str;
for (Name in result) {
if (typeof result[name] !== 'function') {
str = str + ' ' + result[name]
}
}
window.alert(str);
}
Вот самый простой пример, который я мог бы собрать.Вот мой файл ASPX:
<%@ Page language="c#" Debug="true" Codebehind="Default.pas" AutoEventWireup="false" Inherits="Default.TWebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head runat="server">
<title>Keeping it simple</title>
<script type="text/javascript">
function OnLookup()
{
WebService.Echo('repeat after me', OnLookupComplete, OnError);
}
function OnLookupComplete(result)
{
window.alert('Success :' + result);
}
function OnError(result)
{
window.alert('Error ' + result);
}
</script>
</head>
<body>
<form runat="server">
<asp:ScriptManager id="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference path="../../statisticsservice/statisticsservice.asmx"></asp:ServiceReference>
</Services>
</asp:ScriptManager>
<asp:UpdatePanel id="UpdatePanel1" runat="server"></asp:UpdatePanel>
<input value="Button" type="button" onclick="OnLookup();">
</form>
</body>
</html>
Понятно, что Web-сервис фактически выполняется, поскольку вызовы WebMethods с более интенсивным процессом возвращаются дольше.Тем не менее, то, что я вижу после выполнения из приложения Delphi, это окно с предупреждением, которое содержит «Success: [object object]»
Итак, если повторить вопрос, кто-нибудь успешно использовал ASP.NET Web с поддержкой AJAXМастер приложений в Delphi 2007 для выполнения вызовов ajax?Если да, то в чем секрет того, чтобы заставить его работать.
После проверки значения, возвращенного в функциях обратного вызова (основанного на использовании FireFox и FireBug, как предложил Wouter), следующее исправлениеJavaScript в простом примере.
function OnLookup()
{
WebService.Echo('repeat after me', OnLookupComplete, OnError);
}
function OnLookupComplete(result)
{
window.alert('Success :' + result.d);
}
function OnError(result){
window.alert('Error ' + result._message);
}
</script>
Пара замечаний.Во-первых, я до сих пор не знаю, почему возвращаемая строка находится в свойстве с именем d, но по крайней мере это работает.Во-вторых, лучше, если вы поместите свои функции JavaScript и объявления переменных в файл, отдельный от вашего HTML.Когда вы это делаете, вы ссылаетесь на внешний файл JavaScript или файлы в свойстве Scripts ScriptManager.Я включил JavaScript в HTML-файл здесь для простоты.