我有一个足够简单的网络服务:
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string GetToken(string a)
{
}
我正在使用JQuery将其称为客户端:
$.ajax({
post: 'GET',
contentType: "application/json; charset=utf-8",
dataType: 'json',
url: '../url/GetToken',
data: "{'a':'test'}",
success: function (data) {
},
error: function (a, b, c) {
}
});
调用始终失败,返回的错误是500内部服务器错误。我在Web服务中放置了一个断点,代码根本没有到达。当我修改Web服务以完全不参数(并从JQuery调用中删除data
元素)时,调用成功。我用不同的方法来传递data
元素;我已经传递了一个JSON对象(没有引号),我已经从a
参数周围删除了引号。它都不起作用。
使用Fiddler我已经确定导致500的实际错误是"无效的Web服务调用,参数&#34的缺失值。
以这种方式传递数据有效:
data: "a='test'"
我不知道为什么。有什么想法吗?
答案 0 :(得分:3)
尚未对此进行测试,但在您的代码段中,您有post: 'GET'
而不是type: 'GET'
。这可能导致服务器拒绝将contentType作为json(这就是为什么你的数据没有被正确序列化)。
答案 1 :(得分:2)
您可以使用Fidler之类的工具来检查您要回复的回复。很可能会返回一个错误页面,但由于它是一个jquery ajax调用,你没有看到它。
答案 2 :(得分:2)
我无法使用GET,必须使用POST作为类型,而我的Web服务位于同一目录中,但这有效:
$.ajax({
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json',
url: 'url.asmx/GetToken',
data: "{'a':'test'}",
success: function(data) {
alert("Success");
},
error: function(a) {
alert(a.responseText);
}
});