Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript类型错误:JSON数组对象未定义_Javascript_Json - Fatal编程技术网

Javascript类型错误:JSON数组对象未定义

Javascript类型错误:JSON数组对象未定义,javascript,json,Javascript,Json,我从服务器响应中得到了一个完美创建的JSON对象 例如: { "users": [ { "userId": 20410, "firstName": "Viral", "lastName": "Shah", "loginId": "viralp.shah@tcs.com", "userRole": 3 }, {

我从服务器响应中得到了一个完美创建的JSON对象

例如:

{
    "users": [
        {
            "userId": 20410,
            "firstName": "Viral",
            "lastName": "Shah",
            "loginId": "viralp.shah@tcs.com",
            "userRole": 3
        },
        {
            "userId": 400881,
            "firstName": "Viral",
            "lastName": "Shah",
            "loginId": "viralpshah123@gmail.com",
            "userRole": 0
        },
        {
            "userId": 425622,
            "firstName": "Viral",
            "lastName": "Shah",
            "loginId": "viralpshah123@tcs-itontap.com",
            "userRole": 0
        }
    ]
}
我使用AJAX在JavaScript中使用它,如下所示:

var jsonobj2 = null;
var respObj = getSearchedWPUsers(firstname, lastname, loginid); //return json response
var len = respObj.length;
jsonobj2 = eval('(' + respObj + ')');


var tablehtml = "<table><tr><td><b>First Name</td><td><b>Last Name</td><td><b>Login Id</td><td><b>Editing Rights</td></tr><tr></tr>";

for (i = 0; i < len; i++) {
  tablehtml = tablehtml + "<tr>";
  //--------------
  tablehtml = tablehtml + "<td>";
  tablehtml = tablehtml + jsonobj2.users[i].firstName;
  tablehtml = tablehtml + "</td>";
  //--------------
  tablehtml = tablehtml + "<td>";
  tablehtml = tablehtml + jsonobj2.users[i].lastName;
  tablehtml = tablehtml + "</td>";
  //--------------
  tablehtml = tablehtml + "<td>";
  tablehtml = tablehtml + jsonobj2.users[i].loginId;
  tablehtml = tablehtml + "</td>";
  //--------------
  tablehtml = tablehtml + "<td><b>";
  var role = jsonobj2.users[i].userRole;
  if (role == 1 || role == 2 || role == 3) tablehtml = tablehtml + "<a href ='javascript:removeXML(" + jsonobj2.users[i].userId + ")'><u><font color='red'>Revoke access</font></a> ";
  else tablehtml = tablehtml + "<a href ='javascript:generateXML(" + jsonobj2.users[i].userId + ")'><u><font color='blue'>Assign access</font></a> ";

  tablehtml = tablehtml + "</td>";
  tablehtml = tablehtml + "</tr>";

}
tablehtml = tablehtml + "</table>";


document.getElementById("TableHolder").innerHTML = tablehtml;

//--------------------------
var jsonobj2=null;
var respObj=getSearchedWPUsers(firstname、lastname、loginid)//返回json响应
var len=响应长度;
jsonobj2=eval('('+respObj+'));
var tablehtml=“First NameLast NameLogin IdEditing Rights”;
对于(i=0;i
它抛出如下错误

TypeError:jsonobj2.users[i]未定义

[在此错误上中断]

tablehtml=tablehtml+jsonobj2.users[i].firstName

尝试使用
JSON.parse(serverresponse)--什么也没发生

请帮助

尝试以下方法:

jsonobj2 = eval('(' + respObj + ')');
var len = jsonobj2.users.length;
据我所知,
respObj
是一个包含JSON响应的字符串,但它仍然需要解析。因此,如果执行
respObj.length
,则可以正确地获得字符串的长度,而不是用户数组的长度。另外,我建议您使用
JSON.parse
(只要浏览器可用)来解析此响应,而不是使用
eval

var respObj = getSearchedWPUsers(firstname, lastname, loginid);
var jsonobj2 = JSON.parse ? JSON.parse(respObj) : eval('(' + respObj + ')');
var len = respObj && respObj.users ? respObj.users.length : 0;
但是,正如Felix Kling和Aamir Adnan所说,ajax调用大多是异步的,因此您可以传递回调函数作为参数,它将按照您的意愿处理响应:

getSearchedWPUsers(firstname, lastname, loginid, function(respObj){
    var jsonobj2 = JSON.parse ? JSON.parse(respObj) : eval('(' + respObj + ')');
    var len = respObj && respObj.users ? respObj.users.length : 0;
    var tablehtml = "<table><tr><td><b>First Name</td><td><b>Last Name</td><td><b>Login Id</td><td><b>Editing Rights</td></tr><tr></tr>";

    for (i = 0; i < len; i++) {
        tablehtml = tablehtml + "<tr>";
        //--------------
        tablehtml = tablehtml + "<td>";
        tablehtml = tablehtml + jsonobj2.users[i].firstName;
        tablehtml = tablehtml + "</td>";
        //--------------
        tablehtml = tablehtml + "<td>";
        tablehtml = tablehtml + jsonobj2.users[i].lastName;
        tablehtml = tablehtml + "</td>";
        //--------------
        tablehtml = tablehtml + "<td>";
        tablehtml = tablehtml + jsonobj2.users[i].loginId;
        tablehtml = tablehtml + "</td>";
        //--------------
        tablehtml = tablehtml + "<td><b>";
        var role = jsonobj2.users[i].userRole;
        if (role == 1 || role == 2 || role == 3)
            tablehtml = tablehtml + "<a href ='javascript:removeXML(" + jsonobj2.users[i].userId + ")'><u><font color='red'>Revoke access</font></a> ";

        else tablehtml = tablehtml + "<a href ='javascript:generateXML(" + jsonobj2.users[i].userId + ")'><u><font color='blue'>Assign access</font></a> ";

        tablehtml = tablehtml + "</td>";
        tablehtml = tablehtml + "</tr>";

    }
    tablehtml = tablehtml + "</table>";

    document.getElementById("TableHolder").innerHTML = tablehtml;
});
getSearchedWPUsers(firstname、lastname、loginid、function(respObj){
var jsonobj2=JSON.parse?JSON.parse(respObj):eval(“(“+respObj+”)”);
var len=respObj&&respObj.users?respObj.users.length:0;
var tablehtml=“First NameLast NameLogin IdEditing Rights”;
对于(i=0;i
你确定respObj是你认为的那样吗?从进行Ajax调用的函数返回值似乎很奇怪。请告诉我们它包含什么。您确定
respObj
包含什么吗?您可能需要执行
async:false
ajax,以便从ajax调用返回一些内容。因为ajax是异步的。你有没有检查firebug中respObj中的内容?检查firebug响应。getSearchedWPUsers(firstname、lastname、loginid);方法是AJAX调用方法,它返回json对象。我已经在post respObj的上面粘贴了一个示例响应,但它确实返回了一个值。理解了这个错误的长度。谢谢你,马克