2013-11-01 115 views
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))」我想。

回答

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; 
+0

的jQuery做所有的編碼/字符串化的你 - 你可以直接傳遞對象。除了按照建議進行服務器端編輯之外,OP應該這樣做:'return postData({calcParams2:calcParams})' – Adam

+0

Doh!我創建了「calcparams2」作爲複製測試,並忘記更改第二個屬性名稱。男人,那是愚蠢的。然而......只有喬尼S的答案有效。我必須在那裏有JSON.stringify調用,否則web方法什麼都不會收到。我試過({calcParams2:calcParams}),沒有任何東西可以通過。出於某種原因,我需要在那裏「串起來」才能起作用。我不知道爲什麼... – TheMook