2

我的 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回调,而是调用onErroralert用作:

alert(response.status + " | " + response.statusText + " | " + response.responseText + " | " + response.responseXML );

打印这个:

500 | 内部服务器错误 | {"Message":"无效的 Web 服务调用,缺少参数值:\u0027hello\u0027。" ,"StackTrace":" 在 System.Web.Script.Services.WebServiceMethodData.CallMethod(对象目标,IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 参数)\r\n 在 System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext 上下文,WebServiceMethodData methodData,IDictionary `2 rawParams)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} | 不明确的

我不明白为什么我会收到这个错误。

如果我将 jQuery 调用更改为使用POSTmethod 和 make UseHttpGet=false,那么效果很好。但我希望它与GET. 需要修复什么?

4

2 回答 2

1

HTTP GET 期望参数全部编码在 URL 中。

问题是您正在对有效负载执行JSON.stringifyjQuery.ajax实际上只是在寻找可以将其转换为一系列查询字符串参数的简单字典。

因此,如果您有这样的对象:

{ name: "value" }

jQuery 会将它附加到 URL 的末尾,如下所示:

?name=value

使用 Firebug、Chrome 开发人员工具或 IE 开发人员工具检查传出 URL,我怀疑您会看到它采用 ASP.Net 无法翻译的格式。

于 2012-09-29T13:43:18.820 回答
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!
});

希望有帮助!

于 2014-03-13T04:05:54.183 回答