# Webservice JSON-Objekt übergeben



## qde (19. Januar 2009)

Hallo, Hallo.

Ich stehe grade ein wenig auf dem Schlauch. 

Ich habe ein JSON-Objekt in Javascript und möchte es gerne an meinen Webservice übergeben, um es dann dort auszulesen. Bisher habe ich nur mit GET-Parametern gearbeitet, aber da es sich um Arrays im JSON-Objekt handelt wäre es sehr sehr umständlich das in einen konformen Request-String zu konvertieren und im Webservice dann wieder zu transformieren. 

Daher ist meine Frage, ob es die Möglichkeit gibt, ein JSON-Objekt zu posten. 

Lösungen über jQuery sind auch willkommen. 

Danke!


----------



## Sven Mintel (20. Januar 2009)

Moin,

klar kannst du JSON auch posten, das ist sogar empfehlenswerter, wenn du nicht sicher sein solltest, wie umfangreich das Objekt werden kann und ob es vielleicht das GET-Limit sprengen könnte.


----------



## qde (20. Januar 2009)

Hi Sven,

gut! Nur wie bekomme ich das hin? 

Ich habe es so versucht: 

jQuery.post( 'meinwebservice.aspx', meinJsonObjekt, callback, "json") ;
function callback(returnVal){}

Es wird zwar ein Request abgesetzt, aber das JSON-Objekt scheint irgendwie verschollen. 

Vielen Dank!


----------



## Sven Mintel (20. Januar 2009)

Das muss ca. so aussehen:
	
	
	



```
$.post('meinwebservice.aspx', //Zieladresse
        { jsonobjekt: JSON.stringify(deinObjekt) },//Key:Value
        function(returnVal){alert(returnVal);}, //callback
        "text"//Datentyp für Callback
        );
```


Der 1. Parameter ist ja klar.
Der 2: Der übermittelte JSON-String braucht ja einen Namen, damit das Empfängerskript ihn ansprechen kann....im Beispiel ist es "jsonobjekt"
Dazu dann der JSON-String, der übermittelt werden soll.....das ganze als Objekt verpackt.

Der 3: (callback-Funktion) sollte auch klar sein.

Der 4: Der Datentyp, den die meinwebservice.aspx an die callback-Funktion zurückliefert. Mögliche Werte:
"xml", "html", "script", "json", "jsonp", oder "text"


----------



## qde (20. Januar 2009)

Wunderbar! Vielen Dank. Anfangs hatte ich Probleme, aber das hab ich jetzt auch gelöst. 

Als Antwort auf meinen Request gab es die Fehlermeldung, dass es sich womöglich um eine Attacke handeln könnte. Wenn in dem JSOn-Objekt HTML ist, dann wird das vom Webserver automatisch als Angriffsversuch gewertet. Wie man diese Überprüfung umgehen kann ist hier nachzulesen. 

Das JSON-Objekt wird über Response.Write( Request.Form[ "jsonobjekt" ].ToString() ); in asp ausgelesen.


----------



## qde (21. Januar 2009)

Hi,

ich habe noch eine kleine Folgefrage, an der ich hängen bleibe. Folgender POST funktioniert einwandfrei. 


```
jQuery.post('../Webservices/WidgetData.aspx', 
        { GetData: JSON.stringify(wid) },
        function(retVal){    
            alert(retVal);
        },
        "text"
        );
```

So habe ich dann aber das Problem, dass der Request asynchron abgesetzt wird und das will ich nicht. In meinem Webservice kann ich dann einfach den Request-Parameter "GetData" ansprechen und greife an den Value zu. 

Mein Synchroner POST sieht so aus: 


```
var retv = jQuery.ajax({type: "POST",
        url: "../Webservices/WidgetData.aspx",
        data:JSON.stringify(wid)
        ,async: false}).responseText;
        alert(retv);
```

Das funktioniert auch alles soweit mit dem Haken, dass kein selbst definierter Request-Parameter mehr übergeben wird. Ich kann lediglich auf den Inhalt von "data" zugrreifen, aber weiss nicht was "data" ist. Da mein Webservice mit den ankommenden Daten aber unterschiedliche Sachen machen soll (löschen, speichern, aktualisieren etc.), muss ich umbedingt noch einen Parameter mit übergeben. 

Wie kann ich das machen? 
http://docs.jquery.com/Ajax/jQuery.ajax scheint kein Property zur Verfügung zu stellen, das ich mit dem Parameternamen füllen kann. Versuche wie data: "{GetData:" + JSON.stringify(wid) + "}" sind natürlich gescheitert. 

Für einen Hinweis wäre ich dankbar. 

Merci!


----------



## Sven Mintel (22. Januar 2009)

qde hat gesagt.:


> http://docs.jquery.com/Ajax/jQuery.ajax scheint kein Property zur Verfügung zu stellen, das ich mit dem Parameternamen füllen kann. Versuche wie data: "{GetData:" + JSON.stringify(wid) + "}" sind natürlich gescheitert.




So sollte es gehen:

```
data: {GetData:JSON.stringify(wid),andererParameter:'andererWert' }
```


----------

