具有多个返回值的Ajax服务调用

时间:2019-03-18 19:25:18

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

我正在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调用进行编码吗?

1 个答案:

答案 0 :(得分:2)

您不应该自己写Context.Response。只需从方法中返回一个对象,然后让框架为您完成

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

您必须考虑以下事实:Web服务将json repsonse包装在具有d属性的对象中

{
    "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);
});