如何向回调函数中传入其他参数

如何向回调函数中传参数

 

最近写JS经常会因为向回调函数中传参而头疼,今天总结一下向回调函数中传参的方法,以后的应用中就不用在到处去找了。

 

首先构建一个需要向回调函数中传入参数的典型应用。在一个页面中产生了一系列的向Ajax Proxy的请求,传入的是一个ID,根据ID返回了不同的内容值,我们需要把这些内容打印在页面上,同时给页面元素赋予ID,这个时候就需要向回调函数中传入ID,以产生带ID的页面元素。

 

第一种方法就是使用全局变量,能够被函数和回调函数同时访问。这种方法虽然不够优雅,但是确实能够完成任务。

 

这种方法在传入单个的变量时没什么问题,但是当我们在一个循环的结构中,不断的传入变量到回调函数,这个时候传入的变量会采用最后一次传入的变量值,这就与我们预想的结果有了出入。

 

第二种办法是使用Closure,这种方法更加优雅一些。通过使用Closure,我们通过匿名函数来重新包装返回的对象,同时将需要传入的参数做为新的属性传给回调函数。

 

第三种方法假设你需要为你的回调函数使用不同的签名,例如Ajax.Net的专家们允许你在回调中使用额外的参数,如果你想从一个换到另外一个并且保持兼容性的话,就要用到下面的写法:

 

第四种办法其实就是Closure的一种变体,你不需要显示的声明一个回调函数,而是使用一个匿名函数直接进行你所需要的处理。

如何向回调函数中传参数

 

总结一下:向回调函数中传入参数的终极办法其实就是利用Closure,这个看来是唯一可行而且比较优雅的方法,下面将Closure的写法列在下面:

     var callback = {
        success:function(data){
            var item = document.createElement("li");
            item.id = data.id;
            item.innerHTML = "The id is : " + data.id;
            item.innerHTML += " The value is : " + data.value;
            
            var parent = document.getElementById("result");
            parent.appendChild(item);
        },
        failure:function(){
            alert('failure:');
        }
    }

    xhr = new QueuedHandler();
    for(var i=0;i<20;i++){
        xhr.request('get','ajaxproxy.php?id='+i,function(data){        //第二种办法:利用Closure
            data = eval('(' + data + ')');
            data.id = i;
            callback.success(data);
        });

    }

时间: 2024-10-27 20:52:06

如何向回调函数中传入其他参数的相关文章

nodejs-NodeJS的回调函数中的变量怎么在回调函数外使用

问题描述 NodeJS的回调函数中的变量怎么在回调函数外使用 例如fs的readFile方法: fs.readFile(filename, [options], callback) 其中读取出来的数据是存在回调函数的参数data中,可是我想在回调函数外,使用读取出的数据,该怎么写? 我刚开始学,纯小白,各位大神写详细点儿,谢谢! 解决方案 用readFileSync同步读取,而不是异步,异步你只能讲需要使用数据的代码全部放入callback中 http://www.itxxz.com/a/gao

php-PHP调用 SAP RFC函数,传入字符串参数,RFC接收到的是空字符串

问题描述 PHP调用 SAP RFC函数,传入字符串参数,RFC接收到的是空字符串 $result = $sap->callFunction( "XXX", array( array( "IMPORT", "I_ZCZLX", "1" ), array( "IMPORT", "I_WRITER", "MAO" ), array( "IMPORT&quo

回调函数中JSON对象的解析方式

惯例: 我是温浩然: 先说代码: <div class="modal-body"> <span style="white-space:pre"> </span>            <!-- <iframe src="http://file-server.erzao.org/file-server/video/select/61?categoryId=48&page=1&size=14&am

在回调函数中打开新窗口,使用window.open()为什么不执行啊 急急急

问题描述 在回调函数中打开新窗口,使用window.open()为什么不执行啊 急急急 在回调函数中打开新窗口,使用window.open()为什么不执行啊 急急急 解决方案 不是不执行,异步的话大部分会被浏览器拦截.只有用户主动触发的才不会拦截,如点击按钮弹窗. 你的回掉不知道是不是ajax,如果是改为同步的.异步你要点击某个按钮触发ajax前打开新窗口,并保存窗口句柄,在ajax响应完毕后判断错误就关闭,成功就设置句柄URL为你的地址 如win.url='xxx'

c-ESQL的函数使用传入的参数总报未定义

问题描述 ESQL的函数使用传入的参数总报未定义 请教各位大神,本人写C代码的,本来链接数据库一直用公司的平台封装的函数.今天自己研究了下esql封装几个最简单的函数,但是传给esql函数的参数,总说未定义,是什么问题. #include <stdio.h> EXEC SQL INCLUDE sqlca; EXEC SQL INCLUDE sqlda; EXEC SQL INCLUDE sqlhdr; EXEC SQL INCLUDE decimal; EXEC SQL INCLUDE loc

PowerShell函数中的开关参数介绍和创建实例_PowerShell

本文介绍什么是开关参数,在PowerShell自定义函数中,如何创建开关参数并使用开关参数的值. 什么叫开关参数呢?举个例子,技术男一般都知道有一个网络命令叫"Ping",我们可以使用"ping www.jb51.net"这样一个命令来检查本地计算机到www.jb51.net这个网站所在的服务器网络是否连通.这个命令会从本地发送4个数据包到www.jb51.net服务器,并显示每个数据包是否收到了反馈结果.如果我正在重启www.jb51.net这台服务器,那么pin

jquery ajax回调函数中调用$(this)无法调用的问题解决方法

在调用函数前先把$(this)存入变量,然后再在回调函数中使用就没问题了.  代码如下 复制代码 $(document).ready(function(){ $(".del").click(function () { obj=$(this).parent();//回调函数前先写入变量; delid=$(this).attr('delid'); $.get('drag.php',{'op' : 'del','id' : delid},function(data){ if(data==1)

ajax异步回调函数中给外部变量赋值的问题探讨_AJAX相关

复制代码 代码如下: <!doctype html> <head> <meta charset="utf-8"> </head> <body> <script src="http://localhost/UIBMSPHPProj/public/js/jquery-1.8.2.min.js"></script> <script> $(function(){ var str

ajax异步回调函数中给外部变量赋值的问题探讨

复制代码 代码如下: <!doctype html> <head> <meta charset="utf-8"> </head> <body> <script src="http://localhost/UIBMSPHPProj/public/js/jquery-1.8.2.min.js"></script> <script> $(function(){ var str