2013-03-22 132 views
1

在我的應用程序中,我想通過使用jQuery和Ajax保存數據。我有一個WCF服務。 我想通過使用ajax保存對象列表。我嘗試了以下代碼,但它 不起作用。將對象數組發送到WCF

jQuery代碼:

 var listOfObjects=new Array(); 
 //creating list of objects 
     for(var i=0;i<5;i++) 
     { var MyEntity=new Object(); 
      MyEntity.TestId =i; 
      MyEntity.TestId =i+"testName"; 
      listOfObjects.push(MyEntity); 
     } 

     //Saving info 
     $.ajax({ 
      type: "POST", 
      async: false, 
      data: JSON.stringify(listOfObjects), 
      url: "../ServiceLayer/myService.svc/SaveResults", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",   
      success: function() { 
       alert("success"); 
      }, 
      error: function() { 
       alert("Error"); 
      } 
     }); 

WCF:

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    public void SaveLabResults(List<MyEntity> myEntity) 
    { 
      var lstEntities=myEntity; 
    } 

實體:

[DataContract] 
public class MyEntity 
{ 
    [DataMember] 
    public string TestId { get; set; } 
    [DataMember] 
    public string TestName { get; set; } 
} 

以這種方式我試圖發送列表數據。但內部服務器錯誤即將到來。我沒有得到實際上我錯了的地方。是否有任何其他方式將對象列表發送到WCF?

感謝

回答

2

jQuery代碼:

 var listOfObjects=new Array(); 
 //creating list of objects 
     for(var i=0;i<5;i++) 
     { var MyEntity=new Object(); 
      MyEntity.TestId =i; 
      MyEntity.TestId =i+"testName"; 
      listOfObjects.push(MyEntity); 
     } 

     var jsonList=JSON.stringify(listOfObjects); 
     var dataToSend = '{"myEntity":'+jsonList+''; 

     //Saving info 
     $.ajax({ 
      type: "POST", 
      async: false, 
      data: dataToSend, 
      url: "../ServiceLayer/myService.svc/SaveResults", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",   
      success: function() { 
       alert("success"); 
      }, 
      error: function() { 
       alert("Error"); 
      } 
     }); 

WCF:

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    public void SaveLabResults(List<MyEntity> myEntity) 
    { 
      var lstEntities=myEntity; 
    } 

實體:

[DataContract] 
public class MyEntity 
{ 
    [DataMember] 
    public string TestId { get; set; } 
    [DataMember] 
    public string TestName { get; set; } 
} 

我缺少什麼

1.var jsonList=JSON.stringify(listOfObjects); 
2.var dataToSend = '{"myEntity":'+jsonData+''; 

的第二點myEntity所重點應該有最終JSON object.And關鍵要有 是一樣的WCF方法對象參數。

謝謝

+0

這個答案真的幫了我很大的忙,但是對於其他人來說,在javascript中有一個錯誤。 var dataToSend ='{「myEntity」:'+ jsonData +'';應該是var dataToSend ='{「myEntity」:'+ jsonList +'}'; – Omiron 2015-03-19 12:07:24

0

可能這個人是錯誤:

//creating list of objects 
    for(var i=0;i<5;i++) 
    { var MyEntity=new Object(); 
     MyEntity.TestId =i; 
     MyEntity.TestId =i+"testName"; 
     listOfObjects.push(MyEntity); 
    } //-------------------^--------------shouldn't it be capital M 

,並在AJAX功能:

$.ajax({ 
     type: "POST", 
     async: false, 
     data: {data : JSON.stringify(listOfObjects)}, //<---not quite sure about it. 
+0

你可以現在檢查。我編輯過。 – mns 2013-03-22 12:35:25

1

嘗試BodyStyle = WebMessageBodyStyle.Bare爲您的服務器的方法或引入在您的客戶端代碼中調用JSON.stringify之前,在您的JSON數據中命名爲「myEntity」的根元素。

+0

每當我嘗試Bare然後{「消息」:「身份驗證失敗。」,「StackTrace」:null,「ExceptionType」:「System.InvalidOperationException」} – mns 2013-03-22 12:38:00

+0

是的Oliver你right.i包括一個根元素,它的工作。非常感謝。 – mns 2013-03-22 13:00:29

+1

@mns然後,你應該標記這個答案是正確的。 – 2013-03-22 14:03:49