我正在使用网络服务在asp.net上做一个项目。我的Web服务和我的asp.net项目是分开的,我的asp.net项目引用了我的Web服务
我正在使用visual studio 2008 framework 3.5,我的服务网站在vb.net
我想用JavaScript调用我的网络服务的网络方法
我的脚本管理器被声明
<asp:ScriptManager runat="server" ID="scriptManager" EnablePageMethods="true" >
<Services>
<asp:ServiceReference path="http://localhost:2931/ServiceCompas.asmx"/>
</Services>
</asp:ScriptManager>
JavaScript函数
<script type="text/javascript">
function test() {
alert('test');
Service1.Liste_Carte(Onsucced);
}
function Onsucced(resultat) {
alert('je suis passée');
}
</script>
service1是我的Webservice的类
我用我的按钮调用功能测试
<input name="btnRecherche" class="btnRechercher" type="button" value="Rechercher un emplacement" onclick="test()" />
问题是:JavaScript说Service1没有定义,但为什么?有什么问题?
答案 0 :(得分:0)
仔细检查您是否有权访问Service1的命名空间。您可能必须在调用中使用ASP.NET命名空间,这将使其类似于:
ServiceCompasNamespace.Service1.Liste_Carte(Onsucced);
答案 1 :(得分:0)
<script src="WebService.asmx/js" type="text/javascript"></script>
由于我正在尝试解决同样的问题,我可以看到根据以下内容可能会遗漏这些问题:http://weblogs.asp.net/dwahlin/archive/2006/12/28/understanding-asp-net-ajax-web-service-proxies.aspx(上面的链接)
话虽如此,无法找到service.asmx / js文件...是否有特定要生成的内容?
编辑,它适用于我,这是代码:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="WebService.asmx/js" type="text/javascript"></script>
<script type="text/javascript">
function callback(msg) {
alert(msg);
};
function HelloWorld() {
WebService.HelloWorld(callback);
};
</script>
<title></title>
</head>
<body>
<div id="test" onclick="HelloWorld();">
click this
</div>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService.asmx" />
</Services>
</asp:ScriptManager>
</form>
</body>
</html>
答案 2 :(得分:0)
这可能是由于跨域安全限制(就浏览器而言,不同的端口导致不同的域)。
看起来您正在使用开发网络服务器。在本地调试时,您的单独项目将在不同的端口上运行,这将产生此问题。
对于测试,您可以尝试使用IIS并使用不同的顶级目录创建应用程序,这样它们就可以在端口80上同时运行。