这是c#web方法
[WebMethod]
public string Hello()
{
return "Hello World";
}
这是jquery ajax代码
$.ajax({
url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx",
dataType: 'text',
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::'+ rtndata);
},
error: function (xhr, errorType, exception) {
alert("Excep:: "+exception +"Status:: "+xhr.statusText);
}
});
但是我没有在Hello World
中获得rtndata
,而是获得完整的HTML回复页。
答案 0 :(得分:0)
您需要返回json模型或禁用布局
答案 1 :(得分:0)
如果您收到html页面是因为您要发送html页面。
您应该仔细检查您的代码,以便在发送输出之前知道是否有任何内容附加到响应中。
尝试向ajax调用发送JSON格式的响应,如:
{'hello':'world'}
然后添加dataType作为$ .ajax的选项。如果要打印输出,可以进行警报(JSON.stringify(response))。
$.ajax({
url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx",
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::' + JSON.stringify(rtndata));
},
error: function (xhr, errorType, exception) {
alert("Excep:: " + exception + "Status:: " + xhr.statusText);
}
});
有一件重要的事情......更多时候你会添加缓存:false,但这不能正常工作,你应该做一个技巧来解决。
添加时间戳作为调用的参数,如:
var date = new Date();
$.ajax({
url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx?timestamp="+date.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::' + JSON.stringify(rtndata));
},
error: function (xhr, errorType, exception) {
alert("Excep:: " + exception + "Status:: " + xhr.statusText);
}
});
希望这会有所帮助......
答案 2 :(得分:0)
您必须将方法名称附加到网址(例如/HelloWorld
)并在ajax调用中指定method: "post"
(如果您要使用POST
请求)。试试这个:
$.ajax({
url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx/HelloWorld",
method:"POST",
dataType: "text",
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::' + rtndata);
},
error: function (xhr, errorType, exception) {
alert("Excep:: " + exception + "Status:: " + xhr.statusText);
}
});
如果您想使用GET
作为请求方法,请确保在 web.config 文件中包含此标记:
<system.web>
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
</system.web>
此外,您需要使用ScriptMethodAttribute
:
[ScriptMethod(UseHttpGet = true)]
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
ajax调用(method: "GET"
是可选的,因为它是text
的默认方法):
$.ajax({
url: "http://localhost:57315/helloworld.asmx/HelloWorld",
method: "GET"
dataType: "text",
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::' + rtndata);
},
error: function (xhr, errorType, exception) {
alert("Excep:: " + exception + "Status:: " + xhr.statusText);
}
});
当您使用cache: false
时,可能需要use the GET
request:
Setting cache to false will only work correctly with HEAD and GET requests.
It works by appending "_={timestamp}" to the GET parameters.
答案 3 :(得分:0)
您获得的html页面概述了服务商中所有可用的webmethod - 各种API。尝试在浏览器中导航到它。
如果你想调用你的Hello WebMethod,你应该将“/ Hello”作为方法名称添加到url:
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'http://10.0.2.2/SampleService/Service/HelloWorld.asmx/Hello',
dataType: 'json',
cache: false,
crossDomain: true,
timeout: 15000,
success: function (rtndata) {
alert('Got Success ::'+ rtndata);
},
error: function (xhr, errorType, exception) {
alert("Excep:: "+exception +"Status:: "+xhr.statusText);
}
});
您可以在此处阅读更多内容:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/