2010-08-17 2 views
2

게시 아약스 요청을해야합니다. 여기서 매개 변수로 엔티티 클래스를 전달해야합니다. 예를 들어 대한자바 스크립트에서 엔티티를 전달하여 게시 메소드 아약스 호출을 만드는 방법은 무엇입니까?

:

여기
[OperationContract] 
    [WebInvoke(Method = "POST", 
      BodyStyle = WebMessageBodyStyle.Wrapped, 
      ResponseFormat = WebMessageFormat.Json 
    )] 
    public bool SaveEmployee(Employee employee) 
    { 
     //inserting the data to database. 
    } 

내 엔티티 클래스는 노출 2,3 속성, 말 EMPID, employeename 나이를 가지고 직원입니다.

이 정보는 자바 스크립트에서 전달해야합니다.

function SaveEmployee() { 

var employeename='test'; 
var age=23; 
var empid=34534; 
//these data's i need to pass to the ajax method. 
     var am = new Proxy(); 
     am.invoke("SaveEmployee", { **here how can i pass my entity Employee?** }, function(response){ 
      if (response) { 

내가 자바 스크립트에서 이와 비슷한 작업을 수행 할 수 있습니까?

var employee=new Employee(); 
employee.Name=employeename; 
employee.Age=age; 
employee.EmpId=empid; 
and am.invoke("SaveEmployee", { "Employee":employee }, 

답변

0

다음은 내가 클라이언트 측에서 jQuery를 사용하여 엔티티를 WCF REST 서비스에 POST하는 예제입니다. jQuery를 사용하지 않는다면 여전히 처리 방법을 알게 될 것입니다.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
</head> 
<body> 
    Name: <input type="text" id="name" /><br /> 
    Desc: <input type="text" id="desc" /><br /> 
    <button id="submit">Send!</button> 

    <script type="text/javascript"> 
     $(function() { 
      $("#submit").click(function (e) { 
       e.preventDefault(); 
       var theData = {}; 
       theData["Name"] = $("#name").val(); 
       theData["Desc"] = $("#desc").val(); 
       $.ajax({ 
        type: "POST", 
        url: "ProdService.svc/product/add", 
        data: JSON.stringify(theData), 
        dataType: "json", 
        contentType: "application/json", 
        success: function (data) { 
         alert(data); 
        }, 
        error: function (e, t, x) { 
         alert(t); 
        } 
       }); 
      }); 
     }); 
    </script> 
</body> 
</html> 

주목해야 할 중요한 일들이 내가 application/json에 요청의 내용 유형을 설정하고있어 점이다

다음은 HTML & 자바 스크립트입니다. 이것이 WCF의 핵심이므로 무엇이 보냈는지 알고 있습니다.

내 서비스 등으로 정의된다

:

[OperationContract] 
[WebInvoke(Method="POST", ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, 
    BodyStyle=WebMessageBodyStyle.Bare, UriTemplate="product/add")] 
String AddProduct(Product p) 
{ 
    return "Got " + p.Name; 
} 

그리고 내 엔티티는 다음과 같이이다 :

내 Web.config의이 같은 설정
[DataContract] 
public class Product 
{ 
    [DataMember()] 
    public String Name { get; set; } 
    [DataMember()] 
    public String Desc { get; set; } 
} 

:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="WebApplication2.ProdServiceAspNetAjaxBehavior"> 
       <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="WebApplication2.ProdService"> 
      <endpoint address="" behaviorConfiguration="WebApplication2.ProdServiceAspNetAjaxBehavior" 
       binding="webHttpBinding" contract="WebApplication2.ProdService" /> 
     </service> 
    </services> 
</system.serviceModel> 

을 web.config의 키는 endpointBehaviorenableWebScript 대신 webHttp을 사용한다는 것입니다. . 이 외에도 이것은 거의 기본 구성입니다.

따라서 페이로드는 JSON 화 된 문자열로 변환 된 JavaScript 객체 리터럴입니다. 내 서비스에서 요청 형식을 JSON으로 예상하고 있으며 Product 클래스가 DataMemberDataContract 특성으로 꾸며져 있기 때문에 내 페이로드를 Product 클래스 인스턴스로 deserialize 할 수 있습니다.

이 정보가 도움이되기를 바랍니다. 다른 질문이 있으시면 알려 주시기 바랍니다. 그에 따라 답변을 업데이트하겠습니다.

+0

안녕하세요. wcf를 사용하고 있지 않습니다. 기존 엔티티를 사용하고 있습니다. 거대한 응용 프로그램입니다. 따라서 나는 어떤 속성도 바꿀 수 없다. 다른 정규 법인에 대해 어떻게 할 수 있는지 알려주십시오. – nimi

관련 문제