【问题标题】:Ajax Call to Service with Multiple Return Values具有多个返回值的 Ajax 调用服务
【发布时间】:2019-08-09 06:06:08
【问题描述】:

我正在用 C# 构建一个 WCF 服务,我希望能够从我的一些函数中返回多个值。下面的代码似乎可以做到这一点:

[WebMethod]
public void ReturnMultipleValues(int startingValue)
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new { FirstValue = startingValue, SecondValue = startingValue * 2 };

    Context.Response.Write(ser.Serialize(jsonData));
}

我正在尝试通过 JavaScript 代码中的 ajax 调用来访问此函数:

function runTestService() {
    $.ajax({
        type: "POST",
        url: "http://localhost:12345/WebServices/MyService.asmx/ReturnMultipleValues",
        contentType: "application/json;charset=utf-8",
        data: "{ 'startingValue' : 6 }",
        dataType: "json",
        done: function(data) {
            var firstValue = data.FirstValue;
            var secondValue = data.SecondValue;
            alert("First: " + firstValue + ", Second: " + secondValue);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert("Error: " + errorThrown);
        }
    });
}

当我执行上面的 JavaScript 代码时,.done 部分中的函数永远不会执行。但是,当我检查 Fiddler 时,我发现我的服务中的函数确实执行正确并在 JSON 中返回了正确的值。

是否有另一种方式我应该对服务或对它的 ajax 调用进行编码?

【问题讨论】:

  • 检查您的控制台是否有任何错误。
  • 添加一个错误处理程序,看看错误是什么......
  • 在不知道错误的情况下,这是具有挑战性的。我怀疑返回标头可能未设置为 JSON,这可能会导致 AJAX 调用失败。正如其他人所说,向 AJAX 调用添加错误处理程序以捕获真正导致问题的错误。
  • 我已经为错误添加了一个处理程序。我已经在我的帖子中编辑了代码以包含它。我确实收到一条错误消息:(SyntaxError: Unexpected token { in JSON at position 33)。我在 Fiddler 中查看了结果的原始视图。它没有返回格式正确的 JSON:{"FirstValue":6,"SecondValue":12}{"d":null}

标签: javascript c# ajax wcf asp.net-web-api


【解决方案1】:

您不应该自己写信给Context.Response。只需从方法中返回一个对象,然后让框架为您执行此操作

[WebMethod]
public object ReturnMultipleValues(int startingValue)
{
    var jsonData = new { FirstValue = startingValue, SecondValue = startingValue * 2 };
    return jsonData;
}

而且您必须考虑 Web 服务使用 d 属性将 json 响应包装在对象中的事实

{
    "d": {
        "FirstValue": 6,
        "SecondValue": 12
    }
}

所以也更新js

done(function (data) {
    data = data.d;
    var firstValue = data.FirstValue;
    var secondValue = data.SecondValue;
    alert("First: " + firstValue + ", Second: " + secondValue);
});

【讨论】:

  • 我修改了我的服务,使其像这样工作。它现在按我想要的方式工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多