Скажите, в чем разница между двумя интерпретациями обратного вызова

288
07 июня 2017, 03:34

Вариант 1

window.urlSite=$(this).attr('href');
b1 = $.ajax($(this).attr('href'));
b1.done(function (d1) {
    analysisSite(d1,mask2,window.urlSite);
});

Вариант 2

b2 = $(this).attr('href');
b1 = $.ajax($(this).attr('href'));
$.when( b1, b2 ).done(function ( d1, d2 ) {
    analysisSite(d1,mask2,d2);
});

в первом происходит работа функции analysisSite() штатно. Во втором - алерт говорит, что страница получена. Но дальше с ней почему-то работать код не хочет.

Второй вариант мне нужен, чтобы помимо запрашиваемой страницы передать и ссылку на эту страницу. Первый вариант не передает данную информацию.

Answer 1

Разница в том, что передается в функцию done.

В случае вызова $.when с одним аргументом, параметрами коллбэка done будут результаты обещания переданного в $.when.

Например:

$.when( $.ajax(...) ).done(function ( result, status, xhr) { ... } );

В случае же, если параметров несколько:

$.when( $.ajax(...), var1, var2 )

каждый параметр коллбэка будет соответствовать результату конкретного обещания:

$.when( $.ajax(...), var1, var2 ).done(function(res1, res2, res3){
    // res1 - массив из трех элементов `[result, status, xhr]` - результат выполнения `ajax`.
    // res2 - результат выполнения var1
    // res3 - результат выполнения var2
});

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

В итоге, для того, чтобы получить оба результата, нужно сделать так:

$.when( b1, b2 ).done(function ( d1, d2 ) {
    var ajaxResult = d1[0];
    var stringResult = d2;
    analysisSite(ajaxResult, mask2, stringResult);
});
READ ALSO
Как сделать так чтобы при пустом input определённый элемент скрывался?

Как сделать так чтобы при пустом input определённый элемент скрывался?

Написал так: когда начинаешь печатать в input появляется span, но дело в том, что если потом стереть то, что написал, то этот span остаётся, а надо...

294
MS EDGE, MS IE не понимает размытие filter: blur

MS EDGE, MS IE не понимает размытие filter: blur

Как мне им дать понять что блок нужно мылить? Или никак? Только канвас?

362
Не добавляется сss свойство через jquery

Не добавляется сss свойство через jquery

Не могу понять почему не меняется свойство у ссылки, при нажатии, при этом класс добавляется

322
аналог background-attachment : fixed

аналог background-attachment : fixed

background-attachment : fixed каждый раз при прокрутке вызывает операцию перерисовки что вызывает очень сильные тормоза и лагиМне нужен аналог этого...

477