#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) ‘}’;
выполнил задание 🙂