ajax - 为什么 Delphi 2007 ASP.NET AJAX 调用返回 [object Object]

标签 ajax delphi asp.net-2.0 delphi-2007

有人成功使用 Delphi 2007 中支持 AJAX 的 ASP.NET Web 应用程序向导来进行 ajax 调用吗?如果是这样,让它发挥作用的秘诀是什么。

我问这个有两个原因。首先,我所尝试的方法似乎不起作用。其次,我广泛搜索了 Web,但没有看到任何示例或讨论表明 AJAX 实际上可以在 Delphi 2007 中与 ASP.NET 2.0 一起工作。

事情是这样的。我使用 .NET 4.0 构建了一个支持 AJAX 的 C# 应用程序(以及相应的 C# Web 服务)。这一切都非常简单,并且正在正常工作。

我想从 Delphi 2007 ASP.NET 应用程序中调用这些相同的 WebMethod。不幸的是,当 C# 客户端从 Web 服务接收各种 WebMethods 返回的字符串时,Delphi 2007 客户端接收 [object Object],并且它似乎有两个未定义的属性。我这样说是因为以下代码在用于接收结果时,会显示一个警报窗口,其中显示“未定义未定义”。

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 服务实际上正在执行,因为对进程密集型 WebMethod 的调用需要更长的时间才能返回。尽管如此,我从 Delphi 应用程序执行后看到的是一个警报窗口,其中包含“Success : [object Object]”

那么,重复一下这个问题,是否有人成功使用 Delphi 2007 中支持 AJAX 的 ASP.NET Web 应用程序向导来进行 ajax 调用?如果是这样,让它发挥作用的秘诀是什么。


检查回调函数中返回的值后(基于 Wouter 建议的 FireFox 和 FireBug 的使用),以下是简单示例中 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 文件或 ScriptManager 的 Scripts 属性中的文件。为了简单起见,我在此处的 HTML 文件中包含了 JavaScript。

最佳答案

还没人回答这个问题,所以让我至少尝试以一种或另一种方式提供帮助。

上面的 ShowObjectInfo 函数让我认为您没有使用 FireBug眼下。

要加快调试过程,您可以这样做:

  1. 确保您有 FireFox 和 FireBug已安装;
  2. 按 F12 显示 FireBug Pane ;
  3. 加载您的网页
  4. 转到 firebug script 选项卡;
  5. 通过点击装订线区域,在调用 alert 的行添加断点;
  6. 刷新页面;
  7. 检查 result 变量以查看您得到的结果。

关于ajax - 为什么 Delphi 2007 ASP.NET AJAX 调用返回 [object Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910662/

相关文章:

asp.net-2.0 - 生产服务器系统内存不足异常

jQuery.load 不使用 document.write 执行 javascript

javascript - 循环中的多个 ajax 调用未按调用顺序返回

Delphi:如果用户按下序列太快,则无法捕获 Ctrl+C

delphi - 将任何记录转换为字符串并返回?

c# - 检索具有 CLSID 错误 : 8000401a 的组件的 COM 类工厂

javascript - PHP:响应 AJAX post 请求

javascript - 如何在ajax成功函数中仅访问由json发送的一个对象而不是整个数组?

delphi - 以编程方式更改 Windows XP 中的默认代码页? (来自德尔福)

asp.net - 在 IIS/ASP.Net 的 .NET 1.1 应用程序中创建 .NET 3.0 子应用程序