且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

得到错误:“未捕获的TypeError:无法读取未定义的属性'length'"

更新时间:2022-10-15 22:16:37

您收到的对象中没有"responseJSON",这就是未定义"length"错误的原因:for (var i = 0; i < result.responseJSON.length; i++).删除responseJSON并使用类似以下内容的方法:如何获取对象长度或其他方法. /p>

i am successfully able to get response from wsdl using my client side code by checking chrome dev tool feed retrieve success and various fields like objid, personid, personname, persongroup displayed in chrome dev console. but resultset retrieval is displayed with the error

Uncaught TypeError: Cannot read property 'length' of undefined"

i need only personid and name to be displayed

main.js

currentPage = {};

currentPage.init = function(){
    WL.Logger.debug("MainPage :: init");
};

function validate(){

    var username=$('#username').val();
    var password=$('#userpwd').val();

    busyIndicator.show();

    var params = {
            "process": {"username":username,"userpwd":password}
    };
        var invocationData = {
                adapter : 'SoapAdapter1',
                procedure : 'userlogin_ep_process',
                parameters : [params]
            };
        //{"process":{"username":"$('#username').val()","userpwd":"$('#userpwd').val()"}}
        WL.Client.invokeProcedure(invocationData,{
            onSuccess : loadFeedsSuccess,
            onFailure : loadFeedsFailure
        });
    }

    function loadFeedsSuccess(result){
        WL.Logger.debug("Feed retrieve success");
        busyIndicator.hide();

    alert(result.responseJSON.Envelope.Body.processResponse.PERSON_ID);
    //alert is priniting the value its working
    displayFeeds(result.responseJSON.Envelope.Body.processResponse);

    }

    function loadFeedsFailure(result){
        WL.Logger.error("Feed retrieve failure");
        busyIndicator.hide();
        WL.SimpleDialog.show("Inquiry", "Service not available. Try again later.", 
                [{
                    text : 'Reload',
                    handler : WL.Client.reloadApp 
                },
                {
                    text: 'Close',
                    handler : function() {}
                }]
            );
    }

        function displayFeeds(result){
            var ul = $('#mytable');
       //here i get length undefined error
            for (var i = 0; i < result.responseJSON.length; i++) {

                var li = $('<li/>').html("PERSONID:" +result[i].PERSONID);
                 li.append($('<li/>').html("PERSONNAME:" +result[i].PERSONNAME));

                 li.append($('<hr>'));
                 ul.append(li);
           }
        }

index.html

<label>username</label> <input type="text" id="username"><br><br>
<label>password</label> <input type="text" id="userpwd"><br><br>
<input type="submit" value="login" onclick="validate();">
<ul id="mytable"></ul>

The response:

{
   "Envelope": {
      "Body": {
         "processResponse": {
            "ERROR_CODE": "S",
            "ERROR_MSG": "Login Successful",
            "GROUPS_ID": "76721",
            "PERSON_ID": "309236",
            "PERSON_LOGIN": "Y",
            "PERSON_NAME": "Welcome! ashanka",
            "PERSON_ROLE": "Y",
            "PERSON_UID": "1014336",
            "client": "http:\/\/xmlns.oracle.com\/InternetMobile\/AbsManagement\/BPELProcessUserLogin",
            "xmlns": "http:\/\/xmlns.oracle.com\/InternetMobile\/AbsManagement\/BPELProcessUserLogin"
         }
      },
      "Header": {
         "FaultTo": {
            "Address": "http:\/\/www.w3.org\/2005\/08\/addressing\/anonymous"
         },
         "MessageID": "urn:C9C4DB207D5211E5BF9B25E60F40847D",
         "ReplyTo": {
            "Address": "http:\/\/www.w3.org\/2005\/08\/addressing\/anonymous"
         }
      },
      "env": "http:\/\/schemas.xmlsoap.org\/soap\/envelope\/",
      "wsa": "http:\/\/www.w3.org\/2005\/08\/addressing"
   },
   "errors": [
   ],
   "info": [
   ],
   "isSuccessful": true,
   "responseHeaders": {
      "Content-Length": "1017",
      "Content-Type": "text\/xml; charset=utf-8",
      "Date": "Wed, 28 Oct 2015 09:03:42 GMT",
      "SOAPAction": "\"\"",
      "X-ORACLE-DMS-ECID": "9e10a9dcf92c80fa:-8e91c30:150a34b187a:-8000-0000000000053e79",
      "X-Powered-By": "Servlet\/2.5 JSP\/2.1"
   },
   "responseTime": 106,
   "statusCode": 200,
   "statusReason": "OK",
   "totalTime": 122,
   "warnings": [
   ]
}

There is no "responseJSON" in the object that you have receive, and this is why the error is failing on "length" is undefined: for (var i = 0; i < result.responseJSON.length; i++). Remove responseJSON and use something like: How to get object length or a different approach.