Jquery Ajax Json Объект - PullRequest
       2

Jquery Ajax Json Объект

0 голосов
/ 26 августа 2011

Обычно я пытаюсь вернуть список имен, полученных по запросу 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;
}

JSON, который я возвращаю назад для <2, (тот, который не работает, ниже) </p>

{"success":{"length":2,"userNames":[{"5":"Travis Baseler"},{"6":"Ravi Bhalla"}],"users":["5","6"]}}

JSON, который я передаю обратно, который работает, это

{"success":{"length":"1","usersNames":{"6":"Ravi Bhalla"},"users":["6"]}}

Кто-нибудь знает, почему первый работает, а второй нет?

Ответы [ 2 ]

7 голосов
/ 26 августа 2011

в первом примере "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'}]

1 голос
/ 26 августа 2011

Ваш цикл 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;
 }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...