2

我有一个足够简单的网络服务:

        [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 Internal Server Error。我在 web 服务中放置了一个断点,并且根本没有到达代码。当我修改 Web 服务以完全不接受任何参数(并data从 JQuery 调用中删除元素)时,调用成功。我玩过不同的方式来传递data元素;我已经传递了一个 JSON 对象(没有引号),并且我已经从a参数周围删除了引号。它都不起作用。

编辑:

使用 Fiddler,我确定导致 500 的实际错误是“无效的 Web 服务调用,参数缺失值”。

编辑2:

以这种方式传递数据有效:

data: "a='test'"

我不知道为什么。有任何想法吗?

4

3 回答 3

3

尚未对此进行测试,但在您的代码片段中,您拥有post: 'GET'而不是type: 'GET'. 这可能会导致服务器将 contentType 拒绝为 json(这就是您的数据未正确序列化的原因)。

于 2013-02-11T21:22:19.580 回答
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);
        }
    });
于 2013-02-11T21:34:17.453 回答
2

您可以使用Fidler之类的工具来检查您收到的回复。很可能会返回一个错误页面,但由于它是一个 jquery ajax 调用,因此您没有看到它。

于 2013-02-11T21:05:15.993 回答