Отправка объекта JSON в веб-службу ASP.NET с помощью функции AJAX JQUERY - PullRequest
6 голосов
/ 15 апреля 2010

Я хочу создать объект на стороне клиента на странице aspx. И я хочу добавить функции к этим классам JavaScript, чтобы облегчить жизнь.

На самом деле я могу получить и использовать объекты (полученные из классов на стороне сервера), которые возвращаются из сервисов. Когда я хотел отправить объекты с клиента с помощью методов jquery ajax, я не смог этого сделать:)

Это мои классы JavaScript:

function ClassAndMark(_mark, _lesson){

    this.Lesson = _lesson;
    this.Mark = _mark;
}


function Student(_name, _surname, _classAndMark){

    this.Name = _name;
    this.SurName = _surname;
    this.ClassAndMark = _classAndMark;
}

И это метод для класса Студента для вызова веб-службы:

JSClass.prototype.fSaveToDB(){
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/WS/SaveObject.asmx/fSaveToDB"),

        data: ????????????,
 // This might be: JSON.stringify(this) ?
 // Web service method has a parameter, name is _obj 
 // if i don't send data with parameter, i'm getting this error:
 // Invalid web service call, missing value for parameter: '_obj'
 //
 // Should i send it like that:
 // data: "{_obj:" + JSON.stringify(this) + "}"
 // 
 // I tried to wrap this with parameter like that: 
 // data: JSON.stringify("{_obj:" + this + "}") 
 // 
 // But i got this error:
 // Cannot convert object of type 'System.String' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'

        dataType: "json"
    });
}

Чтобы создать объект javascript и вызвать его метод для отправки его в веб-службу:

На самом деле я не знаю, каким должно быть определение классов и методов на стороне сервера, но я думаю:

class ClassAndMark{

    public string Lesson ;
    public string Mark ;
}


class Student{

    public string Name ;
    public string SurName ;
    public ClassAndMark classAndMark ;
}

Веб-сервис ниже, но опять же я не смог получить то, что должно быть вместо ???? :

[WebMethod()]
public Student fSaveToDB(???? _obj)
{
    // How can i convert input parameter/parameters 
    // of method in the server side object?   

    // SQL operations  
    // srting QInsert = "INSERT INTO tableName (......) VALUES (.....)";
    // ...
    // ..
    // .

    return new Student{
                     Name = ???, // deserialize _obj and pass its Name value
                     SurName = ???, // deserialize _obj and pass its SurName value
                     classAndMark = ???, // deserialize _obj and pass its classAndMark value
                  };
}

Ответы [ 5 ]

5 голосов
/ 15 апреля 2010

Шаг 1, на стороне клиента: Вы должны сериализовать ваши клиентские объекты в JSON, я лично использую метод stringify () библиотеки JSON2: http://www.json.org/js.html

data: JSON.stringify(myObj)

Step2, на стороне сервера: вы должны перевести сериализованный объект в нечто «съедобное» с помощью вашего кода на c #. Здесь вы можете использовать метод deserialize () класса Microsoft JavaScriptSerializer (но он может иметь некоторые проблемы в .net 3.5, если у вас не установлен SP), или в противном случае библиотека JSON.net http://james.newtonking.com/pages/json-net.aspx

Подпись метода на стороне сервера должна быть:

fSaveToDB(Object myObj)

где "myObj" - это имя вашего контейнера объектов на стороне клиента:

{myObj: your object...}
0 голосов
/ 15 января 2017

Давайте упростим это: У вас есть имя экземпляра объекта на стороне сервера и имя экземпляра объекта на стороне клиента.

В вашем jQuery ajax - используйте эту форму

data: '{"myServerSideObjectInstanceName":' + JSON.stringify(myClientSideObjectInstanceName) + '}',

На стороне сервера используйте

public void MyWebServiceMethod(myObject myServerSideObjectInstanceName)
{ ... your code here ...}

Пока myObject имеет идентичную подпись как ваш объект JavaScript, это будет работать. Вы можете получить свои значения (на сервере), используя что-то вроде myServerSideObjectInstanceName.StudentName (или как угодно).

0 голосов
/ 13 февраля 2013

Подробный ответ на аналогичный вопрос гласит, что объединение JQuery & Json2.stringfy () может использоваться для отправки сложного типа в методы на стороне сервера.

А на стороне сервера вам нужно будет только указать требуемый тип в сигнатуре метода (например, foo (MyType obj) {...})

Как отправить объект JSON в веб-сервис asp.net и обработать там данные?

0 голосов
/ 15 апреля 2010

Javascript сторона:

JSClass.prototype.fSaveToDB(){
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/WS/SaveObject.asmx/fSaveToDB"),

        data: data: $.toJSON({ _obj: this }),

        dataType: "json"
    });
}

Веб-сервис:

[WebMethod()]
public Student fSaveToDB(Student _obj)
{
    return bla bla bla;
}
0 голосов
/ 15 апреля 2010

Ваша страница asmx ожидает мыльный конверт? Если это так, вам будет трудно подключиться напрямую к нему с помощью запроса xmlhttp и выполнить дополнительную разметку (это, безусловно, выполнимо, но это сложно). Возможно, вы захотите взглянуть на некоторые примеры создания отдыхающих сервисов, так как с ними будет проще общаться через javascript. Взгляните на http://www.west -wind.com / weblog / posts / 324917.aspx .

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