0

我已经在这几个小时了,但仍然没有做对......请有人让我摆脱痛苦!

javascript:

        var calcParams = {}
        calcParams.calcName="gwp_mat";
        calcParams.components=124.332;

        //return manager.impactCalc(calcName, componentArray)
        return postData("{calcParams2:" + JSON.stringify(calcParams) + "}")
            .then(querySucceeded)
            .fail(queryFailed);


    function postData(cp) {
        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            url: "/api/breeze/testCalc",
            data: cp,
            success: function (data) {
                alert(data);
                return data;
            },
            error: function (error) {
                jsonValue = jQuery.parseJSON(error.responseText);
            }
        });
    }

模型:

Public Class calcParams2
    Public calcName As String
    Public calcNumber As Double
End Class

服务器代码:

<System.Web.Services.WebMethod()> _
Public Function testCalc(cp As calcParams2) As Double
    Dim c As New calcs
    Return cp.calcNumber
End Function

如果我调试它,javascript postData 函数中的“cp”参数是:

"{calcParams2:{"calcName":"gwp_mat","components":124.332}}"

然而在我的网络方法中,calcname 是“nothing”,components 是“0.0”

如果我不使用 JSON.Stringify 我会在我的 web 方法中得到一个空对象。我想我有一个版本的代码,其中传递了 calcName 但组件值仍然为零。我认为那是我刚刚调用“return postData(JSON.stringify(calcParams))”的时候。

4

1 回答 1

1

您只需要在 JSON 中发送对象参数:

return postData(JSON.stringify(calcParams)) ...

但是,您的 JQuery 对象需要与您的服务器对象具有相同的参数名称。将您的服务器对象更改为:

Public Class calcParams2
    Public calcName As String
    Public components As Double
End Class

或更改您的客户对象:

var calcParams = {}
calcParams.calcName="gwp_mat";
calcParams.calcNumber=124.332;
于 2013-11-01T14:06:58.673 回答