0

WCF サービスから返された次の JSON があります。

`{"DoWorkResult":[{"AAID":0,"AreaID":1,"AreaName":"Basement","AssemblyAssessmentID":1,"AssemblyID":493,"AssemblyName":"Handrail (Steel)","AssessmentID":1,"AssessmentName":"University Of WA","AttributesCount":1,"CapitalReplacementUnitCost":623,"CategoryID":7,"CategoryName":"Furniture and Fixtures","CountedUnits":7,"CreatedBy":"Admin","ElementID":37,"ElementName":"Handrails and Balustrades","FacilityID":1,"FacilityName":"Central Chilled Water Plant","FacilityPercentage":"0","IsCompleted":1,"IsHeritage":false,"IsSafetyRisk":false,"Level1Units":0,"Level2Units":0,"Level3Units":0,"Level4Units":0,"Level5Units":7,"MesurementUnit":"Items","PhotosCount":1,"RepairCost":0,"RepairNotes":"","RequiresSpecialist":false,"SiteName":"CRAWLEY","SpaceID":1,"SpaceName":"B01","TasksCount":0}]}

私のサービス方法はこんな感じです

[System.ServiceModel.OperationContract]   
    [WebInvoke(Method = "POST",
              BodyStyle = WebMessageBodyStyle.Wrapped,
              ResponseFormat = WebMessageFormat.Json,
              RequestFormat = WebMessageFormat.Json)]
    public List<BLL.BLL_AssemblyAssessment> DoWork(string id)   {


       return BLL.BLL_AssemblyAssessment.GetAssessemblyAssessmentByAssemblyAssessmentID(1, 1);

    }

jquery ajaxの成功で解析されたデータが必要です。クラスのオブジェクトに解析するにはどうすればよいですか:

$.ajax({
            type: "POST",
            url: "MyTestService.svc/DoWork",
            data: '{"id":"3"}',
            processData: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
             alert(data);
            },
            error: function (msg) {
               // $("#errorDiv").text(msg);
               alert(msg);
            }
        });

}
4

3 に答える 3

0

問題がわかりません。

JSON をデータ型として指定したため、JSON は成功ハンドラーで JavaScript オブジェクトに解析されます。$.each を使用して反復するだけです。

//data.DoWorkResult is an array with one element

$.each(data.DoWorkResult, function(k, v){
    alert(v.AAID); //will alert 0 one time since there is only one object in the
    //array and the value is 0 on the AAID property
});

フィドル

私の例ではJSONを解析する必要があることに注意してください.

于 2013-02-20T13:50:25.743 に答える
0

使用する

  alert(JSON.parse(jsonString));
于 2013-02-20T08:49:53.690 に答える
0

JavaScript コードでは$.ajax、オプションを使用して関数を呼び出すと、 dataType: "json"jQuery が解析を処理できます。

コールバック内のdata変数は、successすでに JavaScript オブジェクトです。

そのプロパティにアクセスできます:

success: function(data) {
    var html = "",
        rows = data.DoWorkResult,
        lgth = rows.length,
        i, row;
    for ( i=0; i<lgth; i++ ){
        row = rows[i];
        html += "<tr><td>"+row.AAID+"</td><td>"+row.AreaName+"</td></tr>";
        // or whatever
    }

    $("#myTable").html( html );
}

私が理解していることから、クラスBLL.BLL_AssemblyAssessmentはクライアント側C#のクラスではなく、サーバー側で使用されるクラスです。javascriptJavaScript では、オブジェクトはデータを保持するためのクラス定義を必要としません。

オブジェクトをコンソールに出力して、その構造を確認できます。

success: function(data) {
    console.log(data);
    console.log(data.DoWorkResult);
    console.log(data.DoWorkResult[0]);
}
于 2013-02-20T13:40:38.657 に答える