ajax回调函数参数传递正确方法

属性方法是可以带参数:

复制代码 代码如下:

function ClassX(name) {

this.name = name;

ClassX.prototype.show = function (param) {

alert(this.name + " " + param);

};

}

var o = new ClassX("name");

o.show("param");//name param

但是,上面是虽然是直接在函数签名中定义了参考,如果不是自己调用o.show('param')时,而是通过其他函数回调传入时,就不一定好使了,因为别人在调用此方法时不一定给你传入此参,比如在使用ajax时

request.onreadystatechange=function(param){...}

request.onreadystatechange=callBack;function callBack(param){...}

时就不好使了,因为此时ajax根本就没有给你传递param参数,正确做法形如:

复制代码 代码如下:

//request.onreadystatechange = orgEval;//错误作法

//request.onreadystatechange = function (request, pOrgName) {//错误作法

// orgEval(request, pOrgName);

//};

//...

request.onreadystatechange = function () {//正确作法

orgEval(request, pOrgName);//在匿名函数内调用回调实现,并直接传入参数,这里用到了JavaScript的闭包性质

};

//...

function orgEval(req, orgName){

//...

}

这样通过在匿名函数内调用回调实现函数,并且直接传入参数即可。

ajax传递参数给onreadystatechange的回调函数

这几天开始学习ajax,其中自己做试验页面时有了传参数给XMLHttpRequest.onreadystatechange的回调函数这个需求。如是baidu了下,发现说到这个的人不少啊。搜来的办法大概是这样:

xmlHttp.onreadystatechange=function(){callback(a,b);};

其中就传递了a和b两个参数。

后来我又自己发现了个方法,方法知道的人肯定很多,不过我在baidu上没搜到,这里就写出来,推广下咯。

复制代码 代码如下:
xmlHttp.a=a;
xmlHttp.b=b;
xmlHttp.onreadystatechange=callback;
.
.
function callback()
{
    if(this.readyState==4)
    {
        a=this.a;
        b=this.b;
    .
    }
}

也就是给xmlHttp对象增加两个属性,在回调函数中直接用this调用那两个属性。

另外说点自己的小经验,xmlHttp最好要写成全局变量,我一开始发现总有些请求没达到目的。后来才发现是把xmlHttp写在了一个函数里面,当那个函数运行完了,xmlHttp生命周期也结束了。这样有些请求在生命周期结束之前就实现了,而有些请求就没了。

时间: 2024-09-12 08:20:25

ajax回调函数参数传递正确方法的相关文章

ajax回调函数参数传递正确方法_AJAX相关

属性方法是可以带参数: 复制代码 代码如下: function ClassX(name) { this.name = name; ClassX.prototype.show = function (param) { alert(this.name + " " + param); }; } var o = new ClassX("name"); o.show("param");//name param 但是,上面是虽然是直接在函数签名中定义了参考,

Javascript基于AJAX回调函数传递参数实例分析_javascript技巧

本文实例讲述了Javascript基于AJAX回调函数传递参数的方法.分享给大家供大家参考,具体如下: 前面介绍了<javascript实现html页面之间参数传递的四种方法>,这里针对ajax参数传递做一分析. 在Javascript 中,特别是在AJAX中,回调函数常常是一个函数名,没有地方放入参数,如下面的AJAX代码,在成功后将调用回调函数callback,但callback是有参数的,如何把参数传进来呢? var callback = function(p1){ //do somet

jQuery AJAX回调函数this指向问题_javascript技巧

如在全局作用域调用一个含this的对象,此时当前对象的this指向的是window.为了让this的指向符合自己的意愿,JavaScript提供了两个方法用以改变this的指向,它们是call和apply,当然也有利用闭包来实现的方法.本文通过一个例子来说明这些问题. 先看一段演示代码,这代码只供演示用,没有实际意义. 复制代码 代码如下: //一个没有实际意义的socket连接对象 var socket = { connect: function(host, port) { alert('Co

【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数

问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:    问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法不认识最后返回的是给ajax的data,而是以为要去找这个页面所以并未找到!! 1 @RequestMapping("/queryAllDisease") 2 @ResponseBody 3 public PageInfo<Disease> queryAllDisease

解决ajax回调函数返回的字符串乱码问题

  ajax回调函数,返回的字符串乱码问题很是让人痛恨,下面有个不错的解决方法,大家可以参考下 ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");//解决乱码问题,没有这句,回调函数的内容可能乱码 ServletActionContext.getResponse().getWriter().write("字符串内容");//在写入之前执行上面一句,可以解决乱码  

ajax回调函数获取不到后台session里边的值

问题描述 ajax回调函数获取不到后台session里边的值 解决方案 又是一个没有搞清楚session在哪里的代码.教科书写明,session是服务器端的对象,也就是说,在浏览器端是取不到session的,也就是说,在浏览器端执行的JS代码是不可能调用到服务器端的session对象.所以,你那个alert()是后执行的,在alert执行时,session已经执行完毕,由于u是一个对象,在你使用<%=的方式进行输出时,自动调用toString()方法,如果你没有重写过这个方法,应该是得到一个&quo

ajax回调函数不执行 请输入长度为10-50-50的问题标

问题描述 ajax回调函数不执行 请输入长度为10-50-50的问题标 <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <html> <head> <script type="text/javascript" src="js/jquery-1.7.2.js"></scr

ajax回调函数中使用$(this)取不到对象的解决方法_AJAX相关

下面这段jquery代码,是可以达到预期效果的. 复制代码 代码如下: $(".derek").each(function(){ $(this).click(function(){ var params = $(this).parent().serialize(); var obj=$(this).parent().siblings("div#caskContent"); var form=$(this).parent(); $.ajax({ url:"e

ajax回调函数中使用$(this)取不到对象的解决方法

下面这段jquery代码,是可以达到预期效果的. 复制代码 代码如下: $(".derek").each(function(){ $(this).click(function(){ var params = $(this).parent().serialize(); var obj=$(this).parent().siblings("div#caskContent"); var form=$(this).parent(); $.ajax({ url:"e