Jquery Ajax Publisering av json til webtjeneste
Jeg prøver å sende et JSON-objekt til en asp.net-nettjeneste.
Min json ser slik ut:
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
Jeg bruker json2.js til å stringyfy json-objektet mitt.
og jeg bruker jquery til å legge det ut på webtjenesten min.
$.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);
}
});
Jeg får følgende feil:
"Ugyldig JSON-primitive:
Jeg har funnet en haug med innlegg relatert til dette, og det ser ut til å være et veldig vanlig problem, men ingenting jeg prøver løser problemet.
Når firebug hva som blir lagt ut på serveren, ser det slik ut:
markers%5B0%5D%5Bposition%5D=128.3657142857143&markers%5B0%5D%5BmarkerPosition%5D=7&markers%5B1%5D%5Bposition%5D=235.1944023323615&markers%5B1%5D%5BmarkerPosition%5D=19&markers%5B2%5D%5Bposition%5D=42.5978231292517&markers%5B2%5D%5BmarkerPosition%5D=-3
Min webservice-funksjon som blir kalt er:
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
228
3
Du nevnte å bruke json2.js for å stringify dataene dine, men de sendte dataene ser ut til å være URLEncoded JSON Du har kanskje allerede sett det, men dette innlegget om den ugyldige JSON-primitive dekker hvorfor JSON blir URLEncoded.
Jeg [fraråder] å sende en rå, manuelt serialisert JSON-streng til metoden din]2. ASP.NET kommer til å automatisk JSON deserialize forespørselens POST-data, så hvis du manuelt serialiserer og sender en JSON-streng til ASP.NET, vil du faktisk ende opp med å JSON-serialisere din JSON-serialiserte streng.
Jeg vil foreslå noe mer langs disse linjene:
Nøkkelen til å unngå det ugyldige JSON-primitive problemet er å sende jQuery en JSON-streng for parameteren
data
, ikke et JavaScript-objekt, slik at jQuery ikke prøver å URLEncode dataene dine.På serversiden må du matche metodens inngangsparametere til formen på dataene du sender inn:
Du kan også godta en matrise, som
Marker[] Markører
, hvis du foretrekker det. Deserializeren som ASMX ScriptServices bruker (JavaScriptSerializer) er ganske fleksibel, og vil gjøre det den kan for å konvertere inndataene dine til server-side-typen du spesifiserer.markers
er ikke et JSON-objekt. Det er et vanlig JavaScript-objekt.data:
-alternativet: Data som skal sendes til serveren. Den konverteres til en forespørselsstreng, hvis den ikke allerede er en streng.Hvis du vil sende dataene som JSON, må du kode dem først:
jQuery konverterer ikke objekter eller matriser til JSON automatisk.
Men jeg antar at feilmeldingen kommer fra å tolke svaret fra tjenesten. Teksten du sender tilbake er ikke JSON. JSON-strenger må omsluttes av doble anførselstegn. Så det må du gjøre:
Jeg er ikke sikker på om det faktiske problemet ditt er å sende eller motta dataene.
Jeg har også støtt på dette, og dette er min løsning.
Hvis du støter på et ugyldig json-objekt unntak når du analyserer data, selv om du vet at json-strengen din er riktig, må du stringify dataene du mottok i ajax-koden din før du analyserer dem til JSON: