我正在尝试从JavaScript调用WebMethod
。到目前为止,我有:
EMSWebService.asmx:
namespace EMSApplication.Web.WebServices
{
/// <summary>
/// Holds the Webservice methods of EMSApplication
</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class EMSWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
在aspx页面中,我添加了以下内容:
<asp:ScriptManager ID="ScriptManager" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServices/EMSWebService.asmx" />
</Services>
</asp:ScriptManager>
<input onclick="callWebMethod();" id="btn" type="button" value="Click Me" />
JavaScript是:
<script type="text/javascript">
function callWebMethod() {
EMSApplication.Web.WebServices.EMSWebService.HelloWorld(OnComplete, OnError);
}
function OnComplete(result) {
alert(result);
}
function OnError(result) {
alert(result.get_message());
}
</script>
但该方法未执行。我收到了以下JavaScript错误:
EMSApplication未定义。
我有什么遗漏的吗?我是否需要进行其他配置?
项目结构如下所示:
JavaScript和组件位于Login.aspx。
[WebService(Namespace = "http://tempuri.org/")]
编辑:
我也尝试过使用jQuery并将aspx页面修改为:
$(document).ready(function () {
$("#btn").click(function () {
$.ajax({
type: "POST",
url: "../WebServices/EMSWebService.asmx/HelloWorld",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response.d);
},
failure: function (msg) {
alert(msg.d);
}
});
return true;
});
});
我在System.Diagnostics.Debug.WriteLine("Hello World");
内写了WebMethod
,它正在执行即ie,它在Visual Studio的输出窗口中打印“Hello World”,但我没有收到任何警告消息。< / p>
答案 0 :(得分:5)
我想直接回答这个问题。
我有WebMethod
,坐在SomePage.aspx
文件中:
[WebMethod]
public static String DoSomething(String shiftName)
{
return shiftName+" hi there";
}
问题是:如何调用此Web方法?由于这是HTTP,答案是HTTP POST 到服务器:
POST http://localhost:53638/SomePage.aspx/DoSomething HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: qps-ploc,en-US;q=0.5
Accept-Encoding: gzip, deflate
Host: localhost:53638
Connection: Keep-Alive
Content-Length: 23
Content-Type: application/json;charset=utf-8
{'shiftName':'contoso'}
需要注意的严重重要事项是:
POST
(GET
无效) 您将aspx页面上的方法名称指定为 SomePage.aspx / [MethodName] 。在这种情况下:
SomePage.aspx页面/ DoSomething的
您将方法的参数作为JSON传递。此方法有一个字符串参数:shiftName
。这意味着我构建了JSON:
{'shiftName':'contoso'}
使用请求的JSON内容类型,您必须指定Content-Type
请求标头:
ContentType: application/json;charset=utf-8
鉴于我的示例WebMethod只是获取提供的文本,追加hi there
并返回该字符串,来自Web服务器的响应是:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 24
Connection: Close
{"d":"contoso hi there"}
HTTP响应主体也是JSON字符串,其中包含一个名为d
的属性。我不知道他们从哪里得到d
,但确实如此。
这就是你使用http调用WebMethod的方式(例如汇编语言,COM,C#,Java,Delphi)。
最常见的问题是如何使用 jQuery从客户端调用它。
$.ajax({
type: "POST",
url: 'Catalogo.aspx/checaItem',
data: "{ id : 'teste' }",
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
注意:任何已发布到公共领域的代码。无需归属。
答案 1 :(得分:1)
您需要确保在web.config中定义了scripthandlerfactory ...更多http://msdn.microsoft.com/en-us/library/bb398998.aspx