2013-07-29 5 views
2

В JS-файле есть несколько вызовов ajax, поэтому я хотел бы вызвать один вызов AJAX с несколькими функциями обратного вызова. Скажем, кто-нибудь поможет мне вызвать несколько вызовов AJAX. тестовый код,jQuery - Как передать несколько функций обратного вызова в jQuery ajax

$.ajax({ 
    url : url, 
    dataType : 'json', 
    success : test1(data) 
}); 

$.ajax({ 
    url : url, 
    dataType : 'json', 
    success : test2(data) 
}); 

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

+0

'success: test1 (data)' и 'success: test2 (data)' не может «отлично работать»! –

ответ

6

просто позвоните и вашей функции внутри функции один successs ...

$.ajax({ 
    url : url, 
    dataType : 'json', 
    success : function(data){ 
     test1(data); 
     test2(data); 
    } 
}); 
0

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

$.ajax({ 
    url: url, 
    dataType: 'json', 
    success: myGlobalCallback(data) 
}); 

function myGlobalCallback(data) { 
    cb1(data); 
    cb2(data);  
} 
+1

Вы не ожидаете, когда произойдет событие успеха, чтобы вызвать функцию myGlobalCallback, и BTW, когда успех запущен, вы используете возвращаемое значение функции, если таковое не имеет значения. Фактически, поскольку данные не определены, это приведет к ошибке. Вы хотите: 'success: myGlobalCallback' –

11

использовать promise объект, возвращенный AJAX

var a1 = $.ajax({ 
    url : url, 
    dataType : 'json', 
    success : test2 
}) 
.done(cb1) 
.done(cb2); 
a1.done(cb3); 
+0

Это на самом деле лучший ответ. –

+0

Что происходит, когда cb1 выдает исключение? –

1

Вы можете сделать это -

$.ajax({ 
     url : url, 
     dataType : 'json', 
     success : function(data){ 
      test2(data); 
      test1(data); 
     } 
}); 
1

Нравится

$.ajax({ 
    url : url, 
    dataType : 'json', 
    success : function(data) { 
    test1(data); 
    test2(data); 
    } 
}); 

Простые образцы.

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

$.ajax({ 
    url : url, 
    dataType : 'json', 
    success : function() { 
    test1.apply(null, arguments); 
    test2.apply(null, arguments); 
    } 
}); 

вы можете использовать их как этот

var test2 = function(data, status, jqXHR) { 
    console.log(data, status, jqXHR); 
}; 
2

Вы можете использовать следующим образом:

$.ajax({ 
     url : url, 
     dataType : 'json', 
     success : function(data){ 
       if(url=="xyz.php") 
        test2(data); 
       else if(url=="abc.php") 
        test1(data); 

     } 
}); 
Смежные вопросы