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

标签 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 调用进行编码吗?

最佳答案

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

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

并且您必须考虑 Web 服务将 json 响应包装在具有 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);
});

关于javascript - Ajax 调用具有多个返回值的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228698/

相关文章:

c# - 如何为列表框(值)索引或 TreeView 节点设置相同的按钮事件?

c# - 为什么驱动程序开发使用 C 而不是 C#?

javascript - jQuery 事件未触发

ruby-on-rails - Rails 4 无法验证 CSRF token 的真实性

javascript - 如何使用 jQuerys Selectable 选择一个 div 及其子元素作为句柄?

javascript - React Native ListView 到 FlatList 迁移

C#:从列表填充列表框的最简单方法

java/jsp使用一种javascript方法对多个表单进行不同的修改

javascript - 让 Javascript 在 ContentEditable Div 中插入退格键

javascript - 通过 Ajax 通过变量将多个变量传递给 PHP 不起作用