2013-03-22 98 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