2010-12-08 5 views
0

콜백이 포함 된 Ajax 호출이 있습니다. (나는 이것을 위해 유이를 사용하고있다). 기본 호출은 다음과 같습니다.라운드 트립 콜백

function something() { 
    var callback1_success = function (o) {… 
    }; 
    var callback1_failure = function (o) {… 
    }; 
    var callback1 = { 
    success: callback1_success, 
    failure: callback1_failure 
    }; 
    var callback2_success = function (o) {… 
    }; 
    var callback2_failure = function (o) {… 
    }; 
    var callback2 = { 
    success: callback2_success, 
    failure: callback2_failure 
    }; 
    var ajax_params = buildAjaxParams(….); 
    Y_GET(ajax_params, callback1); 
    var ajax_params = buildAjaxParams(….); // different stuff 
    Y_GET(ajax_params, callback2); 
} // something 

function Y_GET(p_parms, p_callback) { 
    request = YAHOO.util.Connect.asyncRequest('GET', p_parms, p_callback); 
    return (request); 
} // Y_GET 
This all works fine.What I want to do is send the callback to the server, the server will not process the callback parameters and will send them back in the result set. 

So, Y_GET will become: Function Y_GET(p_parms, p_callback) { 
    var parms_to_send = p_parms + “ & passthrough = ” + p_callback; 
    request = YAHOO.util.Connect.asyncRequest('GET', parms_to_send, local_callback); 
    return (request); 
} // Y_GET 
var local_callback = { 
    success: function (o) { 
    o.responseText.passthrough.success 
    }, 
    failure: function (o) { 
    o.responseText.passthrough.failure 
    } 
}; /* paste in your code and press Beautify button */ 
if ('this_is' == /an_example/) { 
    do_something(); 
} else { 
    var a = b ? (c % d) : e[f]; 
} 

그래서 콜백 함수를 서버에 전달하려면 어떻게해야합니까? 이름을 반환하고 호출합니다. 다른 접근법이 있다면, 나는 콜백 함수를 전달하고 응답 세트에서 그것에 대해 행동하는 것에 대해 개방적이다.

감사합니다.

+0

다음 번에 형식 버튼을 사용하십시오. – galambalazs

답변

0

내 머리 꼭대기에는 내가 생각할 수있는 몇 가지 접근법이 있습니다. eval()은 가능성이 있지만, 일반적으로 임의의 JS 코드를 실행할 위험이 있으므로 피할 수있는 것으로 간주됩니다 (궁극적으로 이것은 누가 평가중인 문자열을 제공하는지에 달려 있습니다).

나는 다음과 같은 접근 방식을 추천 할 것입니다 :

는 기본 JS 개체의 선언으로 당신에게 기능을 만듭니다.

var Callbacks = { 
    callback1: function(){ }, 
    callback2: function(){ } 
}; 

그런 다음 문자열이 콜백 객체에 속성 인덱서와 같은 AJAX 호출에서 반환 사용합니다. 나는 유이의 AJAX 요청에 익숙하지 해요,하지만 잘하면 당신은 아이디어를 얻을 : 당신은 당신이 대신 임의의 자바 스크립트의 만 자신의 콜백 코드를 실행하는 것을 보장하는 개체에 속성 접근을 사용하여

var p_callback = function(){ 
    var local_callback = // parse response, get the callback method you want by name/string 
    Callbacks[local_callback](); // providing arguments as needed, of course 
}; 
YAHOO.util.Connect.asyncRequest('GET', p_parms, p_callback); 

을 그 수도 응답에 포함되었습니다.