Различные объекты при отсрочке с deferred.done ()?

0

При синхронизации запросов ajax, например:

$.when(
    $.get("/api/foo", { prm: 1 }),
    $.get("/api/bar", { prm: 2 })
).done(function (data1, data2) {
    doStuff(data1[0].Value, data2[0].Value);
});

Я получаю объекты результата из отложенного вызова $.get, которые отличаются от того, что я получаю при простое вызов $.get:

$.get("/api/foo", { prm: 1 }, function (data) { doStuff(data.Value); });

В основном, информация, которая мне нужна, - это индекс 0 объектов, переданных в done() (и есть строка "success" в индексе 1 и исходные данные по индексу 2).

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

  • 1
    Это отличается, потому что у обработанного обратного вызова обычно есть 3 параметра, а не один. Для того, чтобы он правильно представлял все три, он использует массив. Это ожидаемое поведение.
  • 0
    «Всегда» смотреть на индекс 0 небезопасно, потому что если только один запрос передается в $.when , это не будет массив, вам просто понадобится data.Value .
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Совершенно безопасно полагаться на данные [0], так как это работает при работе. Ваш единственный звонок должен выглядеть следующим образом:

$.get("/api/foo", { prm: 1 }, function (data, statusText, jqXHR) { doStuff(data.Value); });

Но вы решили опустить другие параметры, что в порядке. Теперь проще понять, почему использование jQuery.when заставляет вас обращаться к данным [0]... потому что данные [0] - это первый параметр результата получения, данные [1] - это текст состояния, а данные [2] - jqXHR.

  • 0
    Спасибо, имеет смысл сейчас, но я бы не узнал так легко.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню