jQuery: как объединить 2 результата запросов к json серверу? - PullRequest
1 голос
/ 16 января 2012

Интересно, можем ли мы сделать что-то вроде

 var joinedJSON;
 $.get("server.json?action=type&type=image", function(json) {joinedJSON +=json ; }
 $.get("server.json?action=type&type=jpg", function(json) {joinedJSON +=json ; }
 $.get("server.json?action=type&type=png", function(json) {joinedJSON +=json ; }
 $.get("server.json?action=type&type=tiff", function(json) {joinedJSON +=json ; }

, в то время как каждый запрос предоставит нам, скажем, такие данные JSON:

[
    {
        "href": "bf051e8675b11c72eec781e855593589a086d2295378b96a8b7269c31b8fa673.user.file",
        "title": "Привет Мир.jpg",
        "user_name": "Oleg.Jakushkin@gmail.com",
        "modified": "2012-01-16 07:24:11",
        "is_public": 0,
        "size": 65516
    },
    {
        "href": "abd01be9a0830579d6366e48fc0c48d4c7cc350d80719843ca84c782346626f6.user.file",
        "title": "",
        "user_name": "Oleg.Jakushkin@gmail.com",
        "modified": "2012-01-16 07:24:19",
        "is_public": 0,
        "size": 89782
    },
    {
        "href": "0a27fd3b563b2877c3a072648e0f7c2a57539f3aba4ce688c7774eca6b70774e.user.file",
        "title": "Привет Мир 2.jpg",
        "user_name": "Oleg.Jakushkin@gmail.com",
        "modified": "2012-01-16 07:24:29",
        "is_public": 1,
        "size": 58574
    }
]

Получим ли мы один длинный массив с учетомчто некоторые элементы могут повторяться (multymap в C ++) как результат?

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Обратите внимание, что операция добавления + для массивов не определена в Javascript. Вместо того, чтобы расширять массив другим, он объединяет их в строки и объединяет.

[1,2,3] + [4,5,6] // will produce '1,2,34,5,6'

Вы должны использовать concat вместо

[1,2,3].concat([4,5,6])

Также обратите внимание, что $.get - это асинхронная функция. Если вы просто сериализуете их в предоставленном вами коде, вы не будете знать, когда все запросы будут выполнены. Вместо этого вы должны попытаться выполнить каждый запрос в функции обратного вызова предыдущего. Это гарантирует, что каждый запрос выполняется после получения ответа от предыдущего.

var joinedJSON = [];
$.get("server.json?action=type&type=image", function(json) {
  joinedJSON.concat(json);
  $.get("server.json?action=type&type=jpg", function(json) {
    joinedJSON.cancat(json);
  }
}

Если вы считаете вложенные обратные вызовы некрасивыми, вы можете рассмотреть возможность использования асинхронного модуля .

1 голос
/ 16 января 2012

Как только вы (или ваш код) проанализировали возвращенные строки JSON в массивах, вы можете использовать .concat (), чтобы объединить эти два массива в один

var jsontotal = json1.concat(json2);
0 голосов
/ 16 января 2012

Вы можете составлять массивы ответов и объединять http://www.w3schools.com/jsref/jsref_concat_array.asp

...