2013-11-08 2 views
0

Надеюсь, что мое название не вводит в заблуждение. У меня есть событие ajax внутри изменения. Например:jQuery обнаружить ajax финиш внутри функции изменения

$("#my-object").change(function(){ 
    $.get(...); 
}); 

Можно ли обнаружить АЯКС закончить с вызовом изменения():

$("#my-object").change().functionToCallAfterAjaxInChangeCompleted(); 

До сих пор моя единственная идея состояла в том, чтобы написать несколько funcitonalities в .change(function()..) сам по себе, но это не так, как я хочу это.

+0

$ .ajax ({ \t \t \t типа: "POST", \t \t \t URL: "filename.php", \t \t \t данные: dataString, \t \t \t успех: функция (msg) {\t \t \t \t \t \t \t функцияToCa llAfterAjaxInChangeCompleted() \t \t \t \t \t \t \t \t \t} \t \t \t}); // END $ .ajax –

ответ

1

Если вы используете .trigger() вместо от .change(), чтобы запустить событие, вы можете передать дополнительный параметр обработчику событий

$("#my-object").change(function(eventObj, additionalParam) { 
    $.get(...).done(additionalParam.done); 
}).trigger("change", { 
    done: function() { 
     alert("ajax finished"); 
    } 
}); 

Example

+0

Это именно то, что мне нужно !!! Не могли бы вы немного объяснить, что здесь происходит? – kamil

+1

Когда событие 'change' запускается, мы передаем простой объект в качестве дополнительного параметра в обработчик события. В этом объекте вы можете добавить все, что захотите - в этом случае обработчик 'done' для вашего запроса' .get() '. В обработчике 'change' мы, наконец, регистрируем его как' .done (...) 'и все. Нет черной магии :) – Andreas

1

Вы можете сделать это с помощью интерфейса обещание:

// Assign handlers immediately after making the request, 
// and remember the jqxhr object for this request 
var jqxhr = $.get(...); 

jqxhr.done(function() { 
    functionToCallAfterAjaxInChangeCompleted() 
}); 
+0

Это совсем не то, что я хочу, но я бы хотел «изменить» метод, чтобы вернуть объект jqxhr, возможно ли это? – kamil

0

Как сказал в JQuery documentation, вы можете вызвать вашу функцию в успеха обратного вызова:

$("#my-object").change(function(){ 
    $.get("someurl.com", function(data) { 
    ... // process your ajax data 
    functionToCallAfterAjaxInChangeCompleted() 
    }); 
}); 
Смежные вопросы