Estoy tratando de publicar un objeto JSON en un servicio web asp.net.
Mi json se ve así:
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
Estoy usando json2.js para stringyfy mi objeto json.
y estoy usando jquery para publicarlo en mi servicio web.
$.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);
}
});
Estoy teniendo el siguiente error:
"Primitiva JSON no válida:
He encontrado un montón de publicaciones relacionadas con esto y parece ser un problema muy común, pero nada de lo que intento soluciona el problema.
Cuando firebug lo que se publica en el servidor se ve así:
marcadores% 5B0% 5D% 5Bposition% 5D = 128.3657142857143 & marcadores% 5B0% 5D% 5BmarkerPosition% 5D = 7 & marcadores% 5B1% 5D% 5Bposition% 5D = 235.1944023323615 & marcadores% 5B1% 5D% 5BmarkerPosition% 5D = 5BmarkerPosition% 5D = 5BmarkerPosition% 5D 5D = 42.5978231292517 y marcadores% 5B2% 5D% 5BmarkerPosition% 5D = -3
Mi función de servicio web que se llama es:
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
fuente
Respuestas:
Usted mencionó el uso de json2.js para stringificar sus datos, pero los datos PUBLICADOS parecen ser JSON URLEncoded Puede que ya lo haya visto, pero esta publicación sobre la primitiva JSON inválida cubre por qué JSON está siendo URLEncoded.
Yo aconsejaría contra el paso de una cadena de texto, serializado manualmente-JSON en el método . ASP.NET va a deserializar automáticamente JSON los datos POST de la solicitud, por lo que si está serializando y enviando manualmente una cadena JSON a ASP.NET, en realidad terminará teniendo que JSON serializar su cadena serializada JSON.
Sugeriría algo más en este sentido:
La clave para evitar el problema primitivo JSON no válido es pasar jQuery una cadena JSON para el
data
parámetro, no un objeto JavaScript, para que jQuery no intente URLEncode sus datos.En el lado del servidor, combine los parámetros de entrada de su método con la forma de los datos que está pasando:
También puede aceptar una matriz, como
Marker[] Markers
, si lo prefiere. El deserializador que utiliza ASMX ScriptServices (JavaScriptSerializer) es bastante flexible y hará todo lo posible para convertir sus datos de entrada en el tipo de servidor que especifique.fuente
contentType
Se considera si usamos GET y no POST?markers
No es un objeto JSON. Es un objeto JavaScript normal.data:
opción :Si desea enviar los datos como JSON, primero debe codificarlos:
jQuery no convierte objetos o matrices a JSON automáticamente.
Pero supongo que el mensaje de error proviene de interpretar la respuesta del servicio. El texto que envía no es JSON. Las cadenas JSON deben estar entre comillas dobles. Entonces tendrías que hacer:
No estoy seguro de si su problema real es enviar o recibir datos.
fuente
markers
como cadena JSON?Intenté la solución de Dave Ward. La parte de datos no se enviaba desde el navegador en la parte de carga útil de la solicitud de publicación como contentType está configurado en
"application/json"
. Una vez que eliminé esta línea, todo funcionó muy bien.fuente
También me he encontrado con este y esta es mi solución.
Si encuentra una excepción de objeto json no válida al analizar datos, aunque sepa que su cadena json es correcta, haga una cadena de los datos que recibió en su código ajax antes de analizarlos en JSON:
fuente
Tengo consulta,
Estoy publicando los detalles de inicio de sesión en json y obtengo una cadena como
"Success"
, pero no obtengo la respuesta.fuente
Siga esto mediante una llamada ajax al servicio web de java var param = {feildName: feildValue}; JSON.stringify ({data: param})
fuente