0
我已经在这里好几个小时了,但仍然没有得到它的正确...有人请让我摆脱我的痛苦!Json对象没有被传递给web api方法
的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
Server代码:
<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}}"
,但在我的web方法,calcname是“一无所有”和组件是“0.0”
如果我不使用JSON.Stringify我在Web方法得到一个空对象。我想我有一个代码版本,其中calcName被传递,但组件值仍然为零。那是当我刚才调用“返回postData(JSON.stringify(calcParams))”我想。
的jQuery做所有的编码/字符串化的你 - 你可以直接传递对象。除了按照建议进行服务器端编辑之外,OP应该这样做:'return postData({calcParams2:calcParams})' – Adam
Doh!我创建了“calcparams2”作为复制测试,并忘记更改第二个属性名称。男人,那是愚蠢的。然而......只有乔尼S的答案有效。我必须在那里有JSON.stringify调用,否则web方法什么都不会收到。我试过({calcParams2:calcParams}),没有任何东西可以通过。出于某种原因,我需要在那里“串起来”才能起作用。我不知道为什么... – TheMook