Кто-нибудь успешно использовал мастер веб-приложений ASP.NET с поддержкой AJAX в Delphi 2007 для создания ajax-вызовов? Если да, то в чем секрет, чтобы заставить его работать.Почему обратный вызов AJAX в Delphi 2007 возвращает объект [Object Object]
Прошу по двум причинам. Во-первых, то, что я пробовал, похоже, не работает. Во-вторых, я много искал в Интернете и не видел примеров или дискуссий, которые предполагают, что AJAX фактически работал в Delphi 2007 с ASP.NET 2.0.
Вот что происходит. Я построил приложение C#, поддерживающее AJAX (и соответствующий веб-сервис C#), используя .NET 4.0. Все было довольно просто, и оно работает так, как должно быть.
Я хотел бы назвать те же WebMethods из приложения ASP.NET Delphi 2007. К сожалению, пока клиент 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>
Очевидно, что веб-сервис фактически выполняется, так как звонки на более интенсивного процесса WebMethods занимает больше времени, чтобы вернуться. Тем не менее, то, что я вижу после выполнения из приложения Delphi, является предупреждающим окном, содержащим «Success: [object Object]»
Итак, чтобы повторить вопрос, кто-нибудь успешно использовал мастер ASP.NET ASP.NET с включенным AJAX в Delphi 2007 сделать айакс? Если да, то в чем секрет, чтобы заставить его работать.
После проверки значения, возвращаемого в функции обратного вызова (основано на использовании 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-файл.
Предложение Wouter приводит к мгновенному обнаружению происходящего. Объект, возвращаемый функцией обратного вызова, в случае успеха включал свойство с именем d, которое содержит строку, возвращаемую моим WebMethod. Я редактировал вопрос, чтобы включить решение и исправленный код. –