jquery - 为什么我无法使用 GET 向 WebMethod 发送参数?

标签 jquery asp.net ajax web-services getmethod

我的 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 作为:

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

打印这个:

500 | Internal Server Error | {"Message":"Invalid web service call, missing value for parameter: \u0027hello\u0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} | undefined

我不明白为什么会出现此错误。

如果我将 jQuery 调用更改为使用 POST 方法并设置 UseHttpGet=false ,那么效果很好。但我希望它能够与 GET 一起使用。需要修复什么?

最佳答案

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

问题是你正在做 JSON.stringify在你的有效负载上。 jQuery.ajax实际上只是在寻找简单的字典,它可以变成一系列查询字符串参数。

所以如果你有一个像这样的对象:

{ name: "value" }

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

?name=value

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

关于jquery - 为什么我无法使用 GET 向 WebMethod 发送参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652999/

相关文章:

asp.net - 如何从 Controller 设置@Html.ActionLink 的动态标题?

javascript - 特殊字符验证未按预期工作

asp.net - 在 html 和 css 中隐藏水平滚动条?

javascript - AngularJS:防止空(但脏)的表单输入被包含在 AJAX 帖子中

javascript - 使用 AJAX (XMLHttpRequest) 查询维基百科的 API

jquery - 通过单击叠加图像播放youtube视频

javascript - 在 Javascript 确认对话框后,网页转到顶部。如何阻止这个?

javascript - Tron 游戏关键事件问题

javascript - 通过ajax引入xslt页面后执行javascript

javascript - Asp.net Ajax 客户端模板和 SEO 友好