Ваша проблема разбита на две части:
Создание строки JSON
Ваш JSON в указанном вами коде является абсолютно верным. Но быть ручной работой - это боль. Как уже говорили другие, самый простой способ сделать это - создать объект Javascript, а затем JSON.stringify
. Пример:
var data = {
"Address": {
"Address1": "123 Main Street",
"Address2": null,
"City": "New York",
"State": "NY",
"Zip": "10000",
"AddressClassification": null
}
};
data = JSON.stringify(data);
Первый шаг, описанный выше, создает объект с использованием буквенной нотации объекта Javascript, которая является надмножеством JSON (как использовано выше, на самом деле это то же самое, что и JSON, но игнорируйте это). Второй бит берет этот объект и преобразует его в строку.
Конечно, приведенные выше значения являются литеральными строками, что маловероятно. Вот как это выглядело бы, если бы вы имели каждое из этих значений в переменной:
var data = {
"Address": {
"Address1": address1,
"Address2": address2,
"City": city,
"State": state,
"Zip": zip,
"AddressClassification": null
}
};
data = JSON.stringify(data);
В любом случае, теперь у вас есть строка.
Отправка строки JSON в веб-службу
Необходимо выяснить, ожидает ли веб-служба данных в формате JSON , равных телу POST, или ожидает, что данные JSON будут значением параметра в более общем name = значение POST-данных в кодировке URL. Я бы предпочел ожидать первого, поскольку веб-сервис, кажется, специально предназначен для работы с данными в формате JSON.
Если предполагается, что будет телом POST, ну, я никогда не делал этого с jQuery, и то, что вы цитировали, выглядит правильным для меня, читающего документы. Если это не сработает, я бы дважды проверил, что ваша структура объекта действительно то, что они ожидают увидеть. Например, если он просто проверяет один адрес, мне интересно, ожидает ли он получения просто объекта Address, а не объекта, содержащего объект Address, например ::
{
"Address1": "123 Main Street",
"Address2": null,
"City": "New York",
"State": "NY",
"Zip": "10000",
"AddressClassification": null
}
Если предполагается, что это значение параметра в старых скучных данных в многочастной форме в кодировке URL, то:
$.ajax({
type: "POST",
url: "http://bmccorm-xp/HBUpsAddressValidation/AddressValidation.asmx/ValidateAddress",
data: "paramname=" + encodeURIComponent(data),
dataType: "json",
success: function(response){
alert(response);
}
})
Я удалил contentType
, поэтому jQuery вернется к своему значению по умолчанию («application / x-www-form-urlencoded») и обеспечит правильное кодирование строки, созданной выше, в этот тип содержимого. Вам нужно найти paramname
для использования (возможно, «Адрес» и увидеть мой предыдущий комментарий об отправке только адреса, а не объекта, содержащего дочерний объект адреса?).