2013-04-03 2 views
0

У меня есть эта проблема - я хочу сделать многократные запросы AJAX, но мне нужно, чтобы второй запрос был отправлен, когда первый успешно завершен.Waterfall AJAX умножает запросы (например, в wolframalafa)

Я пытаюсь использовать JQuery Deffered объект, jQuery.when() и jQuery.then() методы, но ... (((

Наконец я использовал этот плагин - https://github.com/dio-el-claire/jquery.waterfall . Но я не мог этого сделать. Потому что, как я понял, с этим плагином все возвращаются выходные данные одновременно.

Такие, как в http://www.wolframalpha.com.

Спасибо за заранее!

Извините за мой плохой английский)

ответ

1

использовать часть успеха вызова Ajax. Вы можете поместить туда функцию для обработки возвращаемых данных. Вы также можете иметь дело с ошибками.

Я делаю это псевдокоффикс, но, надеюсь, это будет иметь смысл.

jQuery(() -> 
    window.App = {}; 
    window.App.behaviors = []; 
    window.App.behaviors.push(ComposableBehavior.new()); 
) 

class ComposableBehavior(() -> 
    getData: ((url,successFunction, errorFunction) -> 
    $.ajax(
     url:url, 
     type:'GET', 
     data: {this: "that"}, 
     success: (data) => 
     successFunction(data) 
     error: (errorData) => 
     errorFunction 
    ) 
    ) 
) 
    initialParse: ((data) -> 
    thePlayer = JSON.parse(data) 
    //updatePlayerUi(thePlayer) 
    @getScores(thePlayer) 
) 
    getScores: ((thePlayer) => 
    getData('player/'+thePlayer.id+/'scores', @displayScores, @uhOh) 
) 

    displayScores: (data) => 
    //updateScoreUi(data) 

    uhOh: (errorData) => 
    // displayError(errorData) 
) 

Надеюсь, что это поможет.

+0

Спасибо @ scott-helm! Это прекрасно работает, но ... но на самом деле для этой проблемы не изящное решение !! ?? – SGh

+0

Хорошо, что касается элегантности, вы можете обернуть вызов ajax в «контроллере» из-за отсутствия лучшего термина и назвали методы, которые содержат ваши вызовы ajax. Эти именованные методы могут принимать функции обработчика для успеха и ошибки, и вы могли бы составить свое поведение таким образом. Я уточню свой ответ. – plasticide