有人成功使用 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眼下。
要加快调试过程,您可以这样做:
- 确保您有 FireFox 和 FireBug已安装;
- 按 F12 显示 FireBug Pane ;
- 加载您的网页
- 转到 firebug
script
选项卡; - 通过点击装订线区域,在调用
alert
的行添加断点; - 刷新页面;
- 检查
result
变量以查看您得到的结果。
关于ajax - 为什么 Delphi 2007 ASP.NET AJAX 调用返回 [object Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910662/