Возврат объекта в метод веб-службы ajax

#jquery #ajax #web-services

#jquery #ajax #веб-сервисы

Вопрос:

Я не могу вернуть объект javascript в веб-метод через вызов ajax, как показано ниже:

 var person = {"FirstName":"Foo","LastName":"Bar"};

$.ajax({
    type: "POST",
    url: url,
    data: person,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    onSuccess: function () { alert('Success!'); },
    onError: function () { alert('Error'); }
});
  

С помощью описанного выше метода генерируется недопустимый примитив JSON.
Я бы прибегнул к манипулированию строками следующим образом:

 var person = {"FirstName":"Foo","LastName":"Bar"};
var json = '{person:'   JSON.stringify(person)   '}';

$.ajax({
    type: "POST",
    url: url,
    data: json,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    onSuccess: function () { alert('Success!'); },
    onError: function () { alert('Error'); }
});
  

Теперь это работает нормально, я могу обойтись этим решением, но жизнь сложна, мы не хотим усложнять! Если есть способ передать объект напрямую, я бы хотел его услышать 😉

Комментарии:

1. Какой тип ошибки у вас есть? Сначала пример работает нормально.

2. @Oyeme: он выдает «Недопустимый примитив JSON: бла-бла-бла».. Для восстановления объекта требуется оболочка Person, отсюда и манипулирование строками.. Это сработало на вашем компьютере??

3. Да, это работает. Вы исправили формат JSON {«FirstName»: «Foo», «LastName»:»Bar»};

Ответ №1:

Причина этого, вероятно, в том, что это:

 data: person
  

На самом деле отправляет это:

 FirstName=Fooamp;LastName=Bar
  

потому что jQuery разбивает этот объект на удобный для POST набор ключей / значений. Причина, по которой работает ваша вторая версия, заключается в том, что она фактически отправляет реальную строку JSON. Если бы вы должны были сделать это:

 data: JSON.stringify(person)
  

Это, вероятно, сработало бы.

Комментарии:

1. Спасибо, что указали, что jQuery разбивает объект на набор ключей / значений! Но данные: JSON.stringify(person) по-прежнему не работают. Теперь он выдает «Не удается преобразовать объект в тип ‘System. Коллекции. Общий. Идентификатор [System. Строка. Система. Объект]'»

Ответ №2:

var json = ‘{person:’ JSON.stringify(person) ‘}’;

выполнил задание 🙂