有沒有人成功使用Delphi 2007中啓用AJAX的ASP.NET Web應用程序嚮導來調用ajax?如果是這樣,那麼它的工作祕訣是什麼?爲什麼一個Delphi 2007 ASP.NET AJAX調用返回[object Object]
我問兩個原因。首先,我所嘗試過的似乎並不奏效。其次,我廣泛搜索了Web,並沒有看到任何示例或討論,暗示AJAX實際上在Delphi 2007中與ASP.NET 2.0一起工作。
這是發生了什麼事。我使用.NET 4.0構建了一個支持AJAX的C#應用程序(以及相應的C#Web服務)。這一切都非常簡單,而且它的工作原理應該是這樣。
我想從Delphi 2007 ASP.NET應用程序中調用相同的WebMethods。不幸的是,儘管C#客戶端接收到來自Web服務的各種WebMethods返回的字符串,但Delphi 2007客戶端接收到[object 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應用程序執行後看到的是一個警告窗口,其中包含「成功:[對象對象]」
因此,重複該問題,任何人都可以成功地使用啓用AJAX的ASP.NET Web應用程序嚮導在德爾福2007年做出Ajax調用?如果是這樣,那麼它的工作祕訣是什麼?
檢查在回調函數返回的值之後(基於使用FireFox和螢火作爲沃特建議的),以下是在簡單的例子修復的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的腳本屬性中的外部JavaScript文件或文件。爲了簡單起見,我在這裏將JavaScript包含在HTML文件中。
Wouter的建議可以立即發現正在發生的事情。回調函數返回的對象成功時包含一個名爲d的屬性,其中包含返回的WebMethod字符串。我編輯了問題以包含解決方案和更正的代碼。 – 2011-02-06 15:19:52