привязать несколько функций к успешному вызову ajax - PullRequest
2 голосов
/ 22 декабря 2011

Можно ли привязать несколько ajax-функций к успешному вызову ajax?

Например, у меня есть следующий код:

$('#deals').each(function() {
        var city_slug = $(this).data('city');
        $(".dealloader").show();
            //load deals
            setTimeout(loadDeals, 3000);
}); 

loadDeals function =

  function loadDeals() {    
    var city_slug = $("#deals").data("city");
     //var position = $(this).position();   
         $.ajax({
           cache: false,
           type: "POST",
           url: "get_deals.php",
           data: {'city' : city_slug},
            success: function(html) {
              showYelpStars(function() {
                $('.dealloader').hide();
                $('#deals').append(html);
              });
            }
         }).done(function( msg ) {
           //        
    });

}

yelp Звезды Функция =

 function showYelpStars(callback){
 $('.yelpreviews').each(function() {
     var passurl = $(this).data('yelpurl');
     var passname = $(this).data('name');
     var passstreet = $(this).data('address');
     var passcity = $(this).data('city');
     var passstate = $(this).data('state');
     var passreview = $(this).data('yelp');
     if (passreview.val = '1' && passname !== ""){
     $(this).load('yelpreviews.php', {yelp: passreview, name : passname, address : passstreet, city : passcity, state : passstate} );
     }
    });
    callback();
  }

Функция showYelpStars правильно срабатывает в успешном вызове, однако, поскольку это живой API-вызов yelp, для получения полных результатов требуется несколько секунд, Всесодержимое на странице загружается, и через несколько секунд приходит ответ yelp. Я пытаюсь выяснить, как сохранить отображение моего загрузчика, пока все не вернется к успеху.
Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Полагаю, вы можете использовать .ajaxSuccess(function () {}) для добавления нескольких функций или просто вызвать несколько функций внутри анонимной функции:

        success: function(html){
            run_function_one(html);
            run_function_two(html);
        }

Документы для .ajaxSuccess(): http://api.jquery.com/ajaxSuccess/

UPDATE

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

$.ajax({
    beforeSend : function () {/*show loading message now*/},
    success    : function () {/*hide loading message now*/}
});

OR

/*show loading message now*/
$.ajax({
    success : function () {/*hide loading message now*/}
});

В дополнительном сообщении вы выбираете элемент по идентификатору, который гарантированно возвращает только один результат, но затем вы вызываете .each() для этого выбора. Либо вам не нужен .each(), либо вы должны изменить селектор, чтобы выбрать что-то, что на самом деле может быть несколькими элементами.

1 голос
/ 22 декабря 2011

Реализация обратного вызова в вашей функции showYelpStars:

function showYelpStarts(callback) {
  //Your other code here that loads the Yelp stars
  callback();
}

И тогда в вашем успехе обратный вызов:

success: function(html) {
  showYelpStars(function() {
    $('.dealloader').hide();
    $('#deals').append(html);
  });
}
0 голосов
/ 25 августа 2015

Да, вы можете объявить переменную и связать несколько функций для успеха ajax.

$.ajax({
    type: "GET",
    contentType: "text/plain",
    datatype : "text/",

   url:csvURL,
   async: true,

    success: function (data) {
      var csvData = $.csv.toObjects(data);
      var processInfocsvData = $.csv.toObjects(data);
      PlotGraph(csvData);
      PlotProcessInfoGraph( PlotProcessInfoGraph);

   }, 
    error: function (result) {}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...