[英]Jquery Ajax Json Object
基本上,我试图返回从Ajax请求获得的名称列表。 当只有一个名称时,它会完美工作。 但是,使用多个名称,我开始看到无法解释的行为。
function getIDFromInput(input){
sendToID = new Array; //An Array of "Name :Id"
$.ajax({
type:"GET",
url: "user_search.php",
contentType:"application/x-www-form-urlencoded; charset=utf-8",
dataType:"json",
async:false,
data: "q="+input,
success:function(data){
if(data.success){
var userLength = data.success.length;
if(userLength == 1){ // For one user everything works fine
var userNum = data.success.users[0];
var userName = data.success.usersNames[userNum];
sendToID[0] = userName + " :"+userNum;
}
else if(userLength > 1){ // Multiple users it fails
for(i = 0; i < userLength; i++){
var userNum = data.success.users[i];
//this call works
var userName = data.success.usersNames[userNum];
//this call fails, even though it seems to be the same call as above
sendToID[i] = userName + " :"+userNum;
}
}
else if(userLength < 1){ // never enter here
}
}
},
error:function(data){ //After it fails it goes into here
}
});
return sendToID;
}
我传回的<2的JSON,(不起作用的是,下面)
{"success":{"length":2,"userNames":[{"5":"Travis Baseler"},{"6":"Ravi Bhalla"}],"users":["5","6"]}}
我传回的JSON确实有效
{"success":{"length":"1","usersNames":{"6":"Ravi Bhalla"},"users":["6"]}}
有谁知道为什么第一个可行,而第二个却不可行?
在第一个示例中, "usernames"
是一个数组,在几秒钟内它是一个对象
(请注意第一个示例中的[]
在第二个示例中不存在)。
请参阅@meagar的评论,它比我的解释得更好。
还有一些要点:
1.您正在使用数字作为对象属性名称; 不建议使用此(IMO),因为这有点令人困惑。
2.您可以使用数组的.length
属性获取数组的长度:
var userNum = data.success.users.length
3.以{ 'userNum': X, 'username': Y }
格式设置对象是否更有意义? 这样,您可以只返回一个数组:
success: [ {'userNum': 5, 'username': 'Travis Baseler'}, {'userNum': 6, 'username': 'Ravi Bhalla'}]
您的for循环应如下所示:
for(i = 0; i < userLength; i++){
var userNum = data.success.users[i];
//this call works
var userName = data.success.userNames[i][userNum];//you need to index the user in the array in the object uisng the loop then user the userNum to get your userName.
sendToID[i] = userName + " :"+userNum;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.