Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вопрос по $.pipe() (https://javascript.ru/forum/jquery/34290-vopros-po-%24-pipe.html)

Shitbox2 28.12.2012 00:12

Вопрос по $.pipe()
 
Из мануала:
Цепочка ajax-запросов. Перед тем, как выполнить основной запрос (по адресу url_1), будет произведен предварительный запрос идентификатора текущего пользователя (по адресу url_2)
var request = $.ajax(url_1, {dataType: "json"}),
chained = request.pipe(function( data ){
  return $.ajax(url_2, {data: {user:data.userId} });
});
 
chained.done(function(data){
  // data будет содержать ответ сервера на второй запроса (по url_2)
});

Не пойму. Если мы пишем var request = $.ajax(url_1, {dataType: "json"}), это означает, что запрос сразу же уходит на сервер. Поэтому все, что мы пишем после уже никак не сможет повлиять на этот запрос. Так почему же тогда говориться, что основной запрос не будет выполнен, пока не выполнится второстепенный?

Shitbox2 28.12.2012 10:13

Развернем вопрос в другую плоскость... Нужно сделать цепочку запросов, где первый запрос получает id-шник, а второй запрос по нему обновляет данные. Дедовским методом это делается так:
$.ajax(actionUrl, {
    'data': {'type': 'getId'},
    'success': function (data1) {            
             $.ajax(actionUrl, {
                 'data': {'type': 'updateInfo', 'id': data.id},
                 'success': function (data2) {
                     alert(data2.complete)
                 }
            })
        }
})

А вот с pipe() что-то не получается...
var updateInfo = $.ajax(actionUrl, {
     'data': {'type': 'updateInfo', 'id': data.id}
})
var getId = updateInfo.pipe(function (data2) {
    return $.ajax(actionUrl, {
        data: {'type': 'getId'}
    }
})
getId.done(function (data1) {
    alert(data1.id) //Получили id-шник, но данные-то все равно не обновлены
})

Deff 28.12.2012 12:13

Из-за кеширования обычно делают добавку к url
$.ajax(url+'?'+Math.random(), {dataType: "json"})

Shitbox2 29.12.2012 05:43

Цитата:

Сообщение от Deff (Сообщение 224033)
Из-за кеширования обычно делают добавку к url
$.ajax(url+'?'+Math.random(), {dataType: "json"})

Если установить в $.ajax параметр cache в false, то все что надо само допишется


Часовой пояс GMT +3, время: 05:56.