Я пытаюсь опубликовать объект JSON на веб-сервис asp.net.
Мой JSON выглядит так:
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
Я использую json2.js, чтобы зацепить мой объект json.
и я использую jquery, чтобы опубликовать его на своем веб-сервисе.
$.ajax({
type: "POST",
url: "/webservices/PodcastService.asmx/CreateMarkers",
data: markers,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){alert(data);},
failure: function(errMsg) {
alert(errMsg);
}
});
Я получаю следующую ошибку:
"Недопустимый примитив JSON:
Я нашел кучу постов, связанных с этим, и это, кажется, действительно распространенная проблема, но ничего, что я пробую, не решает проблему.
Когда firebug публикуется на сервере, это выглядит так:
Маркеры% 5B0% 5D% 5Bposition% 5D = 128,3657142857143 & маркеры% 5B0% 5D% 5BmarkerPosition% 5D = 7 & маркеры% 5B1% 5D% 5Bposition% 5D = 235,1944023323615 & маркеры% 5B1% 5D% 5BmarkerPosition% 5D = 19 & маркеры% 5В2% 5D% 5Bposition% 5D = +42,5978231292517 & маркеры% 5В2% 5D% 5BmarkerPosition% 5D = -3
Моя функция веб-сервиса, которая вызывается:
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
источник
Ответы:
Вы упомянули об использовании json2.js для структурирования ваших данных, но POST-данные выглядят как URLEncoded JSON. Возможно, вы уже видели это, но этот пост о недопустимом примитиве JSON описывает, почему JSON кодируется URLEncoded.
Я бы посоветовал против прохождения сырой, вручную сериализована строки JSON в ваш метод . ASP.NET собирается автоматически JSON десериализовать данные запроса POST, поэтому, если вы вручную сериализуете и отправляете строку JSON в ASP.NET, вам действительно придется JSON сериализовать вашу сериализованную строку JSON.
Я бы предложил что-то еще в этом духе:
Ключом к устранению недопустимой проблемы примитива JSON является передача jQuery строки JSON для
data
параметра, а не объекта JavaScript, чтобы jQuery не пытался URLEncode для ваших данных.На стороне сервера сопоставьте входные параметры вашего метода с формой данных, которые вы передаете:
Вы также можете принять массив, например
Marker[] Markers
, если вы предпочитаете. Десериализатор, который использует ASMX ScriptServices (JavaScriptSerializer), довольно гибкий и сделает все возможное для преобразования ваших входных данных в указанный вами тип серверной части.источник
contentType
если мы используем GET, а не POST?markers
не является объектом JSON. Это обычный объект JavaScript.data:
варианте :Если вы хотите отправить данные в формате JSON, вы должны сначала их кодировать:
jQuery не конвертирует объекты или массивы в JSON автоматически.
Но я предполагаю, что сообщение об ошибке исходит от интерпретации ответа службы. Текст, который вы отправляете обратно, не является JSON. Строки JSON должны быть заключены в двойные кавычки. Так что вам нужно сделать:
Я не уверен, что ваша настоящая проблема - отправка или получение данных.
источник
markers
виде строки JSON?Я попробовал решение Дейва Уорда. Часть данных не отправлялась из браузера в части полезной нагрузки запроса на публикацию, так как для contentType установлено значение
"application/json"
. Как только я удалил эту строку, все работало отлично.источник
Я тоже с этим столкнулся, и это мое решение.
Если вы столкнулись с недопустимым исключением объекта json при синтаксическом анализе данных, даже если вы знаете, что ваша строка json верна, зашифруйте данные, полученные в коде ajax, прежде чем анализировать их в JSON:
источник
У меня есть запрос,
Я публикую данные для входа в JSON и получаю строку как
"Success"
, но я не получаю ответ.источник
Пожалуйста, следуйте этому при помощи ajax-вызова к веб-сервису java var param = {feildName: feildValue}; JSON.stringify ({data: param})
источник