Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 往返回调_Javascript_Ajax - Fatal编程技术网

Javascript 往返回调

Javascript 往返回调,javascript,ajax,Javascript,Ajax,我有一个带有回调的Ajax调用。(我正在使用YUI进行此操作)。基本调用如下所示: function something() { var callback1_success = function (o) {… }; var callback1_failure = function (o) {… }; var callback1 = { success: callback1_success, failure: callback1_failure }; v

我有一个带有回调的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];
}
那么,如何将回调函数传递给服务器;返回名称并调用它。如果有另一种方法,我愿意接受,传递回调函数并在响应集中对其执行操作


谢谢。

在我的脑海中,有几种方法我可以想到。eval()是一种可能性,但由于存在运行任意JS代码的风险(最终取决于提供被求值字符串的人),因此通常被认为是可以避免的

我建议采取以下办法:

创建函数作为基本JS对象上的声明

var Callbacks = {
   callback1: function(){ },
   callback2: function(){ }
};
然后,使用AJAX调用返回的字符串作为回调对象的属性索引器。我不熟悉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。

下次使用格式按钮。