0

我注意到产品 API 中似乎有什么错误。问题如下:- 1. 如果返回的 JSON 包含多个进程(在我的情况下为两个进程),则 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 显示这两个进程:-

$(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 只包含一个进程,那么上面的 Java 脚本将返回"undefined"JSON,因为我认为因为没有数据属性并且返回的 JSON 格式如下:-

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

那么,任何人都可以帮助我如何让我的 javascruipt 工作,而不管进程数量如何,或者这是 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 对象,那么它将正常工作......所以我原来的问题现在是 Vice Versa 。

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 回答