IBM MobileFirst 7.0 - 调用REST API失败的适配器过程

时间:2015-04-07 15:47:47

标签: ibm-mobilefirst mobilefirst-adapters

我尝试使用新的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对象吗?

1 个答案:

答案 0 :(得分: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();

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

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