обратные вызовы - PullRequest
       1

обратные вызовы

0 голосов
/ 08 декабря 2010

У меня есть вызов Ajax с обратным вызовом.(Я использую YUI для этого).Основной вызов выглядит так:

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];
}

Итак, как мне передать функцию обратного вызова на сервер;который возвращает имя, и назовите его.Если есть другой подход, я открыт для этого: передать функцию обратного вызова и действовать в соответствии с ней в наборе ответов.

1 Ответ

0 голосов
/ 08 декабря 2010

Вне моей головы, есть пара подходов, которые я могу придумать.eval () возможен, но обычно считается чем-то, что следует избегать, учитывая риск запуска произвольного JS-кода (в конечном итоге это зависит от того, кто предоставляет строку, которую уклоняют).

Я бы рекомендовал следующий подход:

Создайте свои функции как объявления для базового объекта JS.

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

Затем используйте строку, возвращенную из вашего вызова AJAX, в качестве индексатора свойств в свой объект Callbacks.Я не знаком с запросами YUI 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);

Используя методы доступа к свойствам для вашего объекта, вы уверены, что вы выполняете только свой собственный код обратного вызова вместо произвольного JavaScriptкоторые могли быть включены в ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...