SO 上没有答案帮助我解决这个问题。相反,我找到了两篇描述这个问题的文章。
jQuery 不会将请求数据编码为 JSON,而是编码为查询字符串。这会导致 ASP.NET 忽略Accept
标头并使用 XML 进行响应。
Check 本文 http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/标题为“JSON、对象和字符串:天哪!”。
这里我引用一下:
$.ajax({
type: "POST",
url: "WebService.asmx/WebMethodName",
data: {'fname':'dave', 'lname':'ward'},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
由于该数据参数是有效的对象文字,因此以这种方式调用 Web 服务不会在客户端引发任何 JavaScript 错误。不幸的是,它也不会达到预期的结果。
fname=dave&lname=ward
这显然不是我们希望发生的事情。解决方案是确保向 jQuery 传递数据参数的字符串,如下所示:
$.ajax({
type: "POST",
url: "WebService.asmx/WebMethodName",
data: "{'fname':'dave', 'lname':'ward'}",
contentType: "application/json; charset=utf-8",
dataType: "json"
});
这只是语法上的一个小变化,但却带来了很大的不同。现在,jQuery 将保留我们的 JSON 对象,并将整个字符串传递给 ASP.NET,以便在服务器端进行解析。
就我而言,数据参数是一个大对象,因此我使用类似的方法将其手动序列化为 JSON。
data: JSON.stringify({'fname':'dave', 'lname':'ward'}),
从 jQuery 查询时让 ASP.NET ScriptService 返回 JSON 非常棘手,代码中的许多参数可能会使其抛出 XML 而不是 JSON。您应该阅读各种 SO Q/A 以使自己满意。
相关文章来自同一作者 http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/这可能会提供更多指导。