Estou tentando postar um objeto JSON em um serviço da web asp.net.
Meu json fica assim:
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
Estou usando o json2.js para stringyfy meu objeto json.
e eu estou usando o jquery para publicá-lo no meu serviço 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);
}
});
Eu estou recebendo o seguinte erro:
"Primitivo JSON inválido:
Eu encontrei um monte de posts relacionados a isso e parece ser um problema muito comum, mas nada que eu tente conserte o problema.
Ao firebug, o que está sendo publicado no servidor fica assim:
marcadores% 5B0% 5D% 5Bposition% 5D = 128.3657142857143 & marcadores% 5B0% 5D% 5BmarkerPosition% 5D = 7 & marcadores% 5B1% 5D% 5Bposition% 5D = 235.1944023323615 e marcadores% 5B1% 5D% 5Bkerkerition% 5D = 19 5D = 42.5978231292517 e marcadores% 5B2% 5D% 5BmarkerPosition% 5D = -3
Minha função de serviço da web que está sendo chamada é:
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
fonte
Respostas:
Você mencionou o uso do json2.js para especificar seus dados, mas os dados POSTed parecem ser JSON com código URLEn Você já deve ter visto, mas esta publicação sobre o primitivo JSON inválido cobre por que o JSON está sendo codificado com URLEn.
Eu aconselho a não passar uma string JSON bruta serializada manualmente em seu método . O ASP.NET irá JSer desserializar automaticamente os dados POST da solicitação, portanto, se você estiver serializando manualmente e enviando uma string JSON para o ASP.NET, na verdade, você terá que JSON serializar sua string serializada JSON.
Eu sugeriria algo mais ao longo destas linhas:
A chave para evitar o problema primitivo JSON inválido é passar jQuery uma string JSON para o
data
parâmetro, não um objeto JavaScript, para que o jQuery não tente codificar seus dados com URLEn.No lado do servidor, combine os parâmetros de entrada do seu método com a forma dos dados pelos quais você está passando:
Você também pode aceitar uma matriz, como
Marker[] Markers
, se preferir. O desserializador usado pelo ASMX ScriptServices (JavaScriptSerializer) é bastante flexível e fará o possível para converter seus dados de entrada no tipo de servidor especificado.fonte
contentType
considerado se usarmos GET e não POST?markers
não é um objeto JSON. É um objeto JavaScript normal.data:
opção :Se você deseja enviar os dados como JSON, é necessário codificá-los primeiro:
O jQuery não converte objetos ou matrizes para JSON automaticamente.
Mas suponho que a mensagem de erro venha da interpretação da resposta do serviço. O texto que você envia de volta não é JSON. As strings JSON devem ser colocadas entre aspas duplas. Então você teria que fazer:
Não tenho certeza se o seu problema real está enviando ou recebendo dados.
fonte
markers
como string JSON?Eu tentei a solução de Dave Ward. A parte de dados não estava sendo enviada do navegador na parte de carga da solicitação de postagem, pois o contentType está definido como
"application/json"
. Depois que removi essa linha, tudo funcionou muito bem.fonte
Eu encontrei este também e esta é a minha solução.
Se você estiver encontrando uma exceção de objeto json inválida ao analisar dados, mesmo sabendo que sua sequência json está correta, especifique os dados que você recebeu em seu código ajax antes de analisá-lo em JSON:
fonte
Eu tenho consulta
Estou postando os detalhes de login em json e recebendo uma string como
"Success"
, mas não estou recebendo a resposta.fonte
Por favor, siga isto para chamar ajax para o serviço web de java var param = {feildName: feildValue}; JSON.stringify ({data: param})
fonte