论坛首页 Web前端技术论坛

Ajax.Request的参数问题

浏览 8905 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-12  
在ajax.request中的onComplete的function中第一个是transport,但如果我要在ff下得到event对象,
我开始用bindAsEventListener,但不行,那样transport就变成event对象了,后来
我是这么实现的
function opt(evt){
	new Ajax.Request(   
       'ajaxsubmit',{     
            parameters: "time=" +  new Date().getTime(),   
          	onComplete : function(transport){
          		alert(transport);
          		alert(evt);
          	}
    })
}

使用了闭包,才能得到,不知道正确的方法因该是什么
   发表时间:2007-09-12  
bindAsEventListener会把参数付在后面的,试试看arguments[1]是不是XHR
0 请登录后投票
   发表时间:2007-09-13  
谢谢楼上,我最后是这样实现的
Event.observe(window,'load',function(){
		$('tx1').observe('click',function(event){
			new Ajax.Request('ajaxsubmit',{
				onComplete : function(transport,evt){
					alert(transport);
					alert(evt);
				}.bindAsEventListener(this,event)
			})
		}.bind($('tx1')));
	})

我也看了bindAsEventListener的源码,感觉在代码
Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {//这个event是null的
    return __method.apply(object, [event || window.event].concat(args));
  }
}

所以如果我不写成(this,event),那我在onComplete里边alert(arguments.length)是1,不是2
0 请登录后投票
   发表时间:2007-09-13  
正确方法就是把你需要的event信息保存下来,然后用闭包访问。本身你的需求也就是在异步调用完成时能获得发起请求的事件的信息。

而你现在的方式过于复杂,代码意义也不对,只是恰好能达到你的需求而已。
0 请登录后投票
   发表时间:2007-09-13  
回调函数要怎么获得event?
都没有触发事件,怎么可能有event?
在回调函数用bindAsEventListener没什么意义
直接用bind就行了
0 请登录后投票
   发表时间:2008-08-08  
我在 IE中调试了半天,还是不可以,不知怎么回事, 在火狐中可以,在IE中就包脚本错误, 这两个浏览器对Ajax对象使用有什么不一样嘛????
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics