Почему AJAX-вызов Delphi 2007 ASP.NET возвращает [объектный объект] - PullRequest
2 голосов
/ 06 февраля 2011

Кто-нибудь успешно использовал мастер веб-приложений 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-файл здесь для простоты.

1 Ответ

3 голосов
/ 06 февраля 2011

Никто еще не ответил на этот вопрос, поэтому позвольте мне хотя бы попытаться помочь тем или иным способом.

Приведенная выше функция ShowObjectInfo заставляет меня думать, что вы не используете FireBug на данный момент.

Чтобы ускорить процесс отладки, вы можете сделать это:

  1. Убедитесь, что у вас установлен FireFox и FireBug ;
  2. Нажмите F12, чтобы отобразить панель FireBug;
  3. Загрузите веб-страницу
  4. Перейдите на вкладку firebug script;
  5. Добавьте точку останова на линии, где вы находитесьвызов alert, щелкнув в области желоба;
  6. Обновить страницу;
  7. Проверьте переменную result, чтобы увидеть, что у вас есть.
...