gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:33:52 24 4
gpt4 key购买 nike

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

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

这是发生了什么。我使用 .NET 4.0 构建了一个支持 AJAX 的 C# 应用程序(和一个相应的 C# Web 服务)。这一切都非常简单,而且它正在正常工作。

我想从 Delphi 2007 ASP.NET 应用程序中调用那些相同的 WebMethods。不幸的是,虽然 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 应用程序执行后看到的是一个警告窗口,其中包含“成功:[对象对象]”

那么,重复这个问题,有没有人成功地使用 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 分开的文件中。执行此操作时,您将引用 ScriptManager 的 Scripts 属性中的一个或多个外部 JavaScript 文件。为简单起见,我在此处的 HTML 文件中包含了 JavaScript。

最佳答案

还没有人回答这个问题,所以让我至少尝试以一种或另一种方式提供帮助。
ShowObjectInfo上面的函数让我觉得你没有使用 FireBug在这一刻。

为了加快调试过程,你可以这样做:

  • 确保您有 FireFox 和 FireBug已安装;
  • 按 F12 显示 FireBug Pane ;
  • 加载您的网页
  • 去 Firebug script标签;
  • 在您调用的行添加断点 alert , 通过单击装订线区域;
  • 刷新页面;
  • 检查 result变量,看看你有什么。
  • 关于ajax - 为什么 Delphi 2007 ASP.NET AJAX 调用返回 [object Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910662/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com