Ajax Call to Service с несколькими возвращаемыми значениями - PullRequest
0 голосов
/ 18 марта 2019

Я создаю службу WCF на C #, в которой я хотел бы иметь возможность возвращать несколько значений из некоторых моих функций. Код ниже, кажется, сделать это:

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

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

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

Я пытаюсь получить доступ к этой функции с помощью вызова ajax в коде JavaScript:

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 Ответ

2 голосов
/ 18 марта 2019

Вы не должны писать Context.Response самостоятельно. Просто верните объект из метода и позвольте фреймворку сделать это за вас

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

И вы должны учитывать тот факт, что веб-сервис заключает 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...