0

製品 API のエラーと思われるものをメモしました。問題は次のとおりです:- 1. 返された JSON に複数のプロセス (私の場合は 2 つのプロセス) が含まれている場合、JSON の結果は次のようになります:-

{"total":2,"data":[{"id":"leaveApp#2#leaveApplicationProcess","packageName":"Leave App","name":"Leave Application Process","packageId":"leaveApp","label":"Leave Application Process ver 2","version":"2"},{"id":"leaveApp#2#process1","packageName":"Leave App","name":"Leave Application Process2","packageId":"leaveApp","label":"Leave Application Process2 ver 2","version":"2"}]}

そして、次のjavaScriptを使用して2つのプロセスを表示できます:-

$(document).ready(function () {

    $.ajax({
        type: "GET",
        url: "http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=admin&packageId=leaveApp",

        dataType: "JSONP",

        success: function (result) {
            $.each(result.data, function (key, val) {
                var str = val.name + ' | Version ' + val.version;
                                $('<li/>', { text: str })
                .appendTo($('#products'));

            });        }
    }); });

一方、packageid にプロセスが 1 つしか含まれていない場合、上記の Java スクリプトは"undefined"JSON を返します。

{"total":1,"data":{"id":"crm#1#process1","packageName":"CRM","name":"Proposal Approval Process","packageId":"crm","label":"Proposal Approval Process ver 1","version":"1"}}.

では、プロセスの数に関係なく javascript を機能させる方法について誰か助けてもらえますか、またはこれは API 自体の問題ですか?

よろしくお願いします

アップデート

I modify my JavaScript to be as follow:-
$.ajax({
        type: "GET",
       // url: "http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=admin&packageId=" + 'name',
        url: fullurl,
        dataType: "JSONP",
        // contentType: "application/json; charset=utf-8",
        success: function (result) {
            var arr = ( (typeof(result.data) == 'object')        && 
                        (result.data.constructor.name == 'Array') )
                 ? result.data
                 : [result.data];
            $.each(arr, function (key, val) {


                // Format the text to display.
                //   var str = val.packageName + ' | ' + val.packageId;
                var str = val.name + ' | Version ' + val.version;
                // Add a list item for the product.
                $('<li/>', { text: str })
                .appendTo($('#products'));

            });
        }
    });

しかし、現在、JSONオブジェクトが複数ある場合は「未定義」が返されますが、JSOnオブジェクトが1つしかない場合は正常に動作します...したがって、私の元の問題は現在逆です。

4

1 に答える 1

0

これは、JSON データの形式が一貫していないためです。これを修正するにdataは、複数のプロセス (配列の要素) があるかどうかに関係なく、いつでも配列として返すことができます。

または、これを試してください:

var arr = ( (typeof(result.data) == 'object')        && 
            (result.data.constructor.name == 'Array') )
     ? result.data
     : [result.data];
$.each(arr, function (key, val) {
   // ... rest goes here
});

編集:のタイプミスを修正しましたobject

于 2012-10-10T11:05:46.443 に答える