2011-04-27 2 views
0

나는 다음과 같은 기능이 있습니다 : 그래서 loadProjects처럼이 기능을Params를 전달할 수있는 콜백을 사용하여 jQuery 함수를 작성하는 방법은 무엇입니까?

function loadProjects(pID) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) {###Run any supplied call back here####} 
    }); 
} 

전화 (1);

문제 나는 성공 후 callBack 함수를 정의 할 수 있기를 원하며 loadProjects (1, pong (12))를 수행 할 때이를 포함하고 싶습니다. 나는 콜백에 params를 제공 할 수 있기를 원한다.

어떻게 콜백을 허용 할 수 있습니까? 어떻게 해당 함수에 콜백을 전달할 수 있습니까? 나는이 때

loadProjects(22, pong(12)) 

문제는 탁구, 인 (12)를 즉시 실행되고, 나중에 loadProjects 함수를 호출하지 않는 경우 :

뭔가

function loadProjects(pID, callback) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) {###Run any supplied call back here####} 
    }); 
} 

처럼 나는 그 부를 수있는 경우 ?

아이디어가 있으십니까? 감사합니다

답변

7

이 시도 :

function loadProjects(pID, callback) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { 
      if ($.isFunction(callback)) 
       callback(); 
     } 
    }); 

} 

loadProjects(1, function() { pong(12); }); 

나 :

function loadProjects(pID, callback, value) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { 
      if ($.isFunction(callback)) { 
       if (value) { 
       callback(value); 
       }else{ 
       callback(); 
       } 
      } 

     } 
    }); 

} 

loadProjects(1, pong, 12); 
+0

정말 대단합니다. 고맙습니다. 그래서 내가 그렇게하면 받아 들일거야. 5 분 이상, grrr – AnApprentice

+0

'$ .isFunction'에 +1, typeof foo == 'function''보다 더 예뻐요. – karim79

+2

@ karim79 WebKit에서도 실패합니다 ...'typeof/regex/=== 'function' ': P (jQuery를 사용하지 않는다면'callback instanceof Function'을 사용합니다). – alex

2
loadProjects(22, function(){pong(12);}); 
0

이 같은 것을보십시오 :

var loadProjects = (function(pID, callback) { 
    var params = { "property" : "value" } 
    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { callback(params); } 
    }); 
}) 

loadProjects(22, function(p){ console.log(p); }); 
0
function loadProjects(pID, callback) { 
    var callbackArgs = arguments; 
    callbackArgs.shift(); 
    callbackArgs.shift(); 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { 
      // Null or this can be used depending on desired behavaiour 
      // See https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply 
      callback.apply(null, callbackArgs); 
     } 
    }); 
} 

사용 예제를 :

loadProjects(22, pong, 12); 
loadProjects(22, pong, 12, 'foo', 'bar'); 

12, foo 및 bar는 모두 pong 콜백으로 전달됩니다.

관련 문제