クエリAJAX Webサービス:GETとPOST
、GETの道
クライアントを
VARデータ= {classCode: "0001 "}; // 直接JOSNは、オブジェクトをここに
({$アヤックスの
種類: "GET"、
contentTypeの: "ファイルアプリケーション/ JSON;のcharset = UTF-8"、
URL:「/ Webサービス/ ProductPropertyWebService.asmx / GetProductPropertyList "
データ型:" JSON」、
anysc:falseに、
データ:データ、
成功:RenderProperties、
エラー:機能(XMLHttpRequestを、textStatus、errorThrown){
アラート(errorThrown + ':' + textStatus); //エラー処理
}
})。
サーバー側
のコード
[ScriptMethod(ResponseFormat.Json ResponseFormat =、= UseHttpGet trueに)] // = UseHttpGet真の
パブリックリスト<プロパティ> GetProductPropertyList()
{
文字列classCode HttpContext.Current.Request = [ "classCode"]; //取得実施例にクエリ得られた文字列パラメータ値
戻りPropertyManager.GetPropertySet(classCode、 "CN-ZH")データリスト;.
}
二、POSTモードの
クライアント
コード
VARデータ= '{classCode: " ' + classCode + '"、市: "広東省"}'; // JOSN文字列にスプライスここで使用される
$のアヤックス({
タイプ: "POST"、
contentTypeの:「ファイルアプリケーション/ JSON;のcharset = UTF-8 "。
URL:" /WebServices/ProductPropertyWebService.asmx/GetProductPropertyList "
データ型:" JSON "
anysc:falseに、
データ:データ、ポスト//実施形態は、データパラメータは空白にすることはできません"」、もしパラメータは、それ以外の場合はcontentTypeのにリクエストヘッダを添付することはできません、また、 "{}"のように書かれ、通過しない。
成功:RenderProperties、
エラー:関数(XMLHttpRequestを、textStatus、errorThrown){
アラート(errorThrown +を':' + textStatus); //エラー処理
}
})。
サーバー側
のコード
[ScriptMethod(ResponseFormat.Json ResponseFormat =、= UseHttpGet falseに)] falseに// = UseHttpGet
公衆リスト<プロパティ> GetProductPropertyList(classCode文字、文字列市)//ポストの実施形態では、直接かつ自動的に割り当て、JSONに対応するパラメータフィールドのプロパティ
{
リターンPropertyManager.GetPropertySet(classCode、 "CN-ZH")データリスト;.
}
注:パラメータ値が(中国語など)のASCII文字でない場合、GETメソッドとPOSTメソッド、時間のパラメータはencodeURIにGETパラメータは、コーディング、又はサービスデータが文字化けしている受信、があります。
複合データは、JSONの送信
{:Yangjun、年齢:名27のような単純なJSONデータ形式を }
:{名:yangjun、年齢:データフォーマットJSON錯体、JSONのような、ネストされただけであり 27、子供:[{名前:yangke、年齢:1}、 2}]}:{名:yangbin、年齢
データフォーマットは、このような複雑なJSONの配列に、形式に応じて、次にウェブサービスJSON文字列に提出し得ることである場合。ネットのオブジェクトは、どのようにそれを行うには?
たとえば、私は次のようなデータ提出したい
クライアント:
コード
errorThrown){ 警告(errorThrown + '' +テキストの状態)。 } })。
:サーバー側の
デシリアライズの.NETへの1をJSON文字としてオブジェクトを、より多くのオープンソースのライブラリーがあり、私は、.NETバージョン3.5を使用するヘルパークラスを作成し、DataContractJsonSerializerよりも付属しています:
コード
/// <まとめ>
/// JSONシリアライゼーションおよびデシリアライゼーションヘルパーメソッド
/// </要約>
パブリッククラスJsonHelper
{
/// <まとめ>
/// JSONはシリアライズ:オブジェクト形式JSONに配列をストリング
/// </要約>
パブリック静的文字列JsonSerializer <T>(T T)
{
VAR出願新しい新しいDataContractJsonSerializer =(typeof演算(T));
VAR =新しい新規MSのMemoryStream();
ser.WriteObject(MS、T)。
Encoding.UTF8.GetString JSONString =列(ms.ToArray());
ms.Close()
;戻りJSONString
}
/// <概要>
デシリアライズに、JSON文字列形式:/// JSONをデシリアライズオブジェクト
/// </要約>
パブリック静的JsonDeserialize T <T>(文字列JSONString)
{
VaRのSER =新しいDataContractJsonSerializer(typeof演算(T));
VARミリ秒=新しいのMemoryStream(Encoding.UTF8.GetBytes(jsonString));
VAR OBJ =(T)ser.ReadObject(MS)。
OBJ返します。
}
}
図2に示すように、それぞれがので、2つのオブジェクトクラス、クラスとプロパティ修飾子フィールドを上記各音符構築するために、オブジェクトにデシリアライズするので:
コード
【のDataContract]
publicクラスMProductProperty
{
[データメンバー(注文= 0、IsRequiredこの=真)]
パブリックINTのProductId {セット。取得する; }
[データメンバー(注文= 1、IsRequiredこの=真)]
パブリックリスト<MProperty>のpropertylist {セット。取得する; }
}
publicクラスMProperty
{
[データメンバー(= 0次、IsRequiredこの=真)]
パブリックINT PropertyId {セット。取得する; }
[データメンバー(注文= 1、IsRequiredこの=真)]
パブリック文字列PropertyTypeは{セット。取得する; }
[データメンバー(注文= 2、IsRequiredこの=真)]
パブリック文字列PropertyValueを{セット。取得する; }
}
図3に示すように、データを受信して処理するウェブJSON方法:
コード
[WebMethod属性]
[(= UseHttpGet trueに)ScriptMethod]
パブリック文字列PostProductPropertyList()
{
文字列JSONString HttpContext.Current.Request = [ "のpropertylist"];
VAR = JsonHelper.JsonDeserialize productProperty <MProductProperty>(JSONString); // productProperty正常にデシリアライズMProductPropertyオブジェクト
受信成功識別//リターン
リターン「postsuccessを」;
}