Как сделать вызов метода ajax, передавая сущности в JavaScript? - PullRequest
2 голосов
/ 17 августа 2010

Мне нужно сделать запрос post ajax, где мне нужно передать классы сущностей в качестве параметра.

, например:

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

здесь мой класс сущностей - Employee, у которого 2, 3 свойства выставлены, скажем, empId, имя сотрудника и возраст.

Эта информация, которую мне нужно передать из JavaScript.

   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) {

Могу ли я сделать что-то подобное в JavaScript?

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

1 Ответ

0 голосов
/ 17 августа 2010

Вот пример, который я собрал, который помещает сущность в службу REST WCF (используя jQuery на стороне клиента).Если вы не используете jQuery, я думаю, вы все равно поймете, как с этим справиться.

Вот HTML & JavaScript:

<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>

Ключевым моментом, который стоит отметить, является то, что я 'm установив тип содержимого запроса на application/json.Это ключ для 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;
}

И моя сущность такова:

[DataContract]
public class Product
{
    [DataMember()]
    public String Name { get; set; }
    [DataMember()]
    public String Desc { get; set; }
}

Мой web.config настроен так:

<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 заключается в том, что мой endpointBehavior использует webHttp вместо enableWebScript.Кроме этого, это в значительной степени нестандартная конфигурация.

Таким образом, ключи в том, что моя полезная нагрузка - это литерал объекта JavaScript, преобразованный в строку в формате JSON.Мой сервис ожидает, что формат запроса будет JSON, и, поскольку мой класс Product украшен атрибутами DataMember и DataContract, он может десериализовать мою полезную нагрузку в экземпляр класса Product.

Надеюсь, это поможет.Пожалуйста, дайте мне знать, если у вас есть другие вопросы, и я обновлю свой ответ соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...