1

我正在尝试使用新的 REST API 从 HTTP 适配器检索数据。
这是我返回的一些 JSON 对象:

    "items": [
        {
            "category": "category 1",
            "produit": [
                {
                    "id": "57",
                    "name": "this is my name",
                    "answer": [
                        {
                            "id": "146",
                            "answername": " answer 1",
                            "istrue": "0",
                            "questionid": "57"
                        },
                        {
                            "id": "147",
                            "answername": "answer 2",
                            "istrue": "0",
                            "questionid": "57"
                        }
                   ]
               }
          ]
      }
 ]

当我使用它调用过程时,WL.Client.invokeProcedure(invocationData, options);它工作正常。

           var invocationData = {
                    adapter : 'AuthentificationAdapter',
                    procedure : 'getquestion',
                    parameters : [jsontab],
                };
            WL.Client.invokeProcedure(invocationData,{
                onSuccess : $.proxy(function(data)
                {
                    deferred.resolve(data.invocationResult.items);
                },this),
                onFailure : $.proxy(function(error)
                {
                    deferred.reject(error);
                },this)
            });
            return deferred.promise

但是当我使用 REST API 时,它会返回Failed to read the HTTP responseFailed to parse JSON string

这是我的资源请求代码:

var resourceRequest = new WLResourceRequest("/adapters/AuthentificationAdapter/getquestion", WLResourceRequest.POST, 30000);
            resourceRequest.setQueryParameters(jsontab);
            resourceRequest.send().then(
                $.proxy(function(data) {
                    deferred.resolve(data.responseJSON.items);
                },this),

                $.proxy(function(error) {
                    deferred.reject(error);
                },this)
            );

            return deferred.promise;

似乎 REST API 不支持像 WL.Client 这样的完整 JSON 对象作为返回?

4

1 回答 1

2

WL.Client.invokeProcedure返回一个承诺,因此您应该使用以下内容(对于第一部分)而不是自己实现。

var invocationData = {
         adapter : 'AuthentificationAdapter',
         procedure : 'getquestion',
         parameters : [jsontab],
};

return WL.Client.invokeProcedure(invocationData);

WLResourceRequest.send还返回一个承诺,所以你应该使用

var resourceRequest = new WLResourceRequest("/adapters/AuthentificationAdapter/getquestion", WLResourceRequest.GET, 30000);
resourceRequest.setQueryParameter('params', [jsontab]);
return resourceRequest.send();

请注意,您必须使用setQueryParameterand 作为您必须传递的第一个参数'params',作为第二个参数,您必须使用包含适配器函数的所有参数的数组。

仅供参考:我假设前两个代码片段在一个函数中,这就是为什么我要像你以前一样返回一个承诺。

于 2015-04-07T16:26:44.300 回答