我的WebMethod看起来像这样:
[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json, UseHttpGet=true)]
public List<Person> HelloWorld(string hello)
{
List<Person> persons = new List<Person>
{
new Person("Sarfaraz", DateTime.Now),
new Person("Nawaz", DateTime.Now),
new Person("Manas", DateTime.Now)
};
return persons;
}
我正在尝试使用jQuery调用此方法:
var params={hello:"sarfaraz"}; //params to be passed to the WebMethod
$.ajax
({
type: "GET", //have to use GET method
cache: false,
data: JSON.stringify(params),
contentType: "application/json; charset=utf-8",
dataType: 'json',
url: "http://localhost:51519/CommentProviderService.asmx/HelloWorld",
processData: true,
success: onSuccess,
error: onError //it gets called!
});
但它不起作用。它不是调用onSuccess
回调,而是调用onError
,其中我使用alert
作为:{/ p>
alert(response.status + " | " + response.statusText + " | " + response.responseText + " | " + response.responseXML );
打印出来:
500 |内部服务器错误| {“消息”:“无效的网络服务电话, 缺少参数值:\ u0027hello \ u0027。“,”StackTrace“:”at System.Web.Script.Services.WebServiceMethodData.CallMethod(对象 target,IDictionary
2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary
2个参数)\ r \ n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext的 context,WebServiceMethodData methodData,IDictionary`2 rawParams)\ r \ n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的 context,WebServiceMethodData methodData)“,”ExceptionType“:”System.InvalidOperationException“} | 未定义
我不明白为什么会收到此错误。
如果我更改jQuery调用以使用POST
方法并生成UseHttpGet=false
,那么它的效果很好。但我希望它与GET
一起使用。需要修复什么?
答案 0 :(得分:1)
HTTP GET期望所有参数都在URL中编码。
问题是您在有效负载上执行了JSON.stringify。 jQuery.ajax实际上只是在寻找简单的字典,它可以变成一系列查询字符串参数。
所以如果你有这样的对象:
{ name: "value" }
jQuery会将其附加到您的网址末尾,如下所示:
?name=value
使用Firebug,Chrome开发者工具或IE开发人员工具检查外发网址,我怀疑您会看到它的格式是ASP.Net无法翻译的。
答案 1 :(得分:0)
要在GET中发出$ .ajax请求,您必须将数据设置为params="hello=sarfaraz"
所以完整的代码段可以简单地
var params="hello=sarfaraz"; //params to be passed to the WebMethod
$.ajax
({
type: "GET", //have to use GET method
cache: false,
data: params,
dataType: 'json',
url: "http://localhost:51519/CommentProviderService.asmx/HelloWorld",
success: onSuccess,
error: onError //it gets called!
});
希望有所帮助!