我试图通过JS调用Web服务,但无论如何它都没有得到调用。 我想把2号的总和。
页面包含3个textbox
,并且文本设置为硬编码
如
:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="Text1" Text="5" runat="server">
</asp:TextBox>
<asp:TextBox ID="Text2" Text="2" runat="server">
</asp:TextBox>
<asp:TextBox ID="Text3" runat="server">
</asp:TextBox>
</div>
</form>
我的代码如下:
<script type="text/javascript">
$(document).ready(function () {
debugger;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "C:/Users/hp/Documents/visual studio 2010/Projects/WebApplication3/WebApplication3/WebService1.asmx/sum",
data: "{'a':'" + $('input[id$=Text1]').val() + "','b':'" + $('input[id$=Text2]').val() + "'}",
dataType: "json",
success: function (data) {
alert(data);
var results = eval('(' + data.d + ')');
if (results == "success") {
$('input[id$=Text3]').val(data);
//$('span[id$=lblErr]').hide();
}
else {
$('span[id$=lblmsg]').hide();
// $('span[id$=lblErr]').show();
}
},
error: function () {
alert('Error');
}
});
});
</script>
WebService名称WebForm1.aspx
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string sum(string a, string b)
{
string json = "";
int sum = Convert.ToInt32(a) + Convert.ToInt32(b);
System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
json = oSerializer.Serialize(sum);
return json;
}
}
每次运行都显示错误框。请帮助我完成它。感谢。
答案 0 :(得分:0)
您使用网络服务的绝对网址。您应该使用相对服务器路径,如此代码段建议:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{ your: 'data' }",
dataType: "json",
url: "WebService1.asmx/sum",
success: function (data) {
alert(data); //use your data object
}
});
答案 1 :(得分:0)
您的网址错误。它应该是这种形式:
url: "/WebService1.asmx/sum"
为了确保它始终解析到正确的路径,您可以改为:
url: '<%=ResolveClientURL("~/WebService1.asmx/sum%>")'
此外,在您的成功处理程序中,您不需要执行:
var results = eval('(' + data.d + ')');
您可以这样做:
var result= data.d;
最后,在您的WebMethod中,您根本不需要使用JavascriptSerializer。你可以这样做:
int sum = ...
return sum;
响应已采用JSON格式。无需将其序列化两次。
答案 2 :(得分:0)
url: "C:/Users/hp/Documents/visual studio 2010/Projects/WebApplication3/WebApplication3/WebService1.asmx/sum",
这需要是一个HTTP URL,运行JavaScript的HTML文档需要位于the same origin。
data: "{'a':'" + $('input[id$=Text1]').val() + "','b':'" + $('input[id$=Text2]').val() + "'}",
您的JSON无效。字符串必须使用"
个字符分隔,而不是'
,并且用户输入可能会轻易破坏它。
不要通过将字符串混合在一起来生成JSON。使用内置功能,可以正确地为您完成。
data: JSON.stringify({
a: $('input[id$=Text1]').val(),
b: $('input[id$=Text2]').val()
}),