论坛首页 AJAX版 prototype

Ajax.Request的参数问题

浏览 1754 次
精华帖 (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 请登录后投票
论坛首页 AJAX版 prototype

跳转论坛:
快速回复 引用上一条消息 (Alt+S)