ajax回调函数问题【纠结】 本帖最后由 kyzy_yy_pm 于 2011-03-10 18:05:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(arguments[3]){ me.request.onreadystatechange = me.callback; }else{ me.request.onreadystatechange = me.callback(); }不知道跟括号有关系不,俺试下先~ if(arguments[3]){me.request.onreadystatechange = me.callback;}else{me.callback();}貌似这样可以~猜测:是不是同步的情况下用不到回调。 试试这function GetXmlHttpObject(){var xmlHttp=null;try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); }catch (e) { //Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } }return xmlHttp;} 应该要这样的,IE是通过ActiveX实现XMLRequest对象的。LZ也可以看看jquery里面是怎么实现,参考下。 哈哈,多谢大家了,我弄出来了,真是郁闷了以前一直以为ajax回调函数在哪里都行呢,原来不是,嘿嘿,把这个发给大家看看,我写的一个(补足了firefox同步请求出现的问题,不过只用于ajax请求操作)/** * 用法试例: * var obj = new myAjax(); * obj.send(url, "post", data, false, function(data){}); * - * args_1 | 提交路径 * args_2 | 提交方式(get、post) * args_3 | 提交数据(数组) * args_4 | 是否同步(true-异步[默认],false-同步) * args_5 | 回调函数 * - * obj.request.responseText是服务器端(php)返回的数据,可以根据它来进行后续的判断 */var myAjax = function(){ var me = this; this.args = arguments; this.execCallBack = ""; this.createxmlHttpRequest = function(){ if(!me.request){ if(window.XMLHttpRequest){ return new XMLHttpRequest(); }else{ return new ActiveXObject("Microsoft.XMLHTTP"); } } } this.send = function(){ me.request = me.createxmlHttpRequest(); var send = ""; for(var item in arguments[2]){ send += "&" + item + "=" + arguments[2][item]; } if(arguments[1].toLowerCase() == "post"){ url = arguments[0]; }else{ url = arguments[0] + send send = null; } me.request.open(arguments[1].toLowerCase(), url, arguments[3]); me.execCallBack = arguments[4]; if(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3]) { me.request.onreadystatechange = me.callback; } me.request.setRequestHeader("content-type", "application/x-www-form-urlencoded"); me.request.send(send); if(!(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3])) { if(arguments[3]){ me.request.onreadystatechange = me.callback; }else{ me.request.onreadystatechange = me.callback(); } } } this.callback = function(){ if (me.request.readyState == 4 && me.request.status == 200){ new me.execCallBack(me.request.responseText); } }} jquery 弹出对话框被activex控件遮挡问题 JS 问题,求解决 人在线! jsp一个很简单的获取value值的问题 如何建立一个总在最上的半透明窗体 怎么根据name 删除一个组件 HTML 如何接受参数 通过php输出的input,用jquery如何获取? 请问如何在做好的flash上面加上连接,听说加个层,不知道怎么整阿? 一个表单能同时提交给两个页面吗? 如何做一个搜索引擎? ext 在tabpanel中引用gridpanel出现显示问题 需要一段javascript代码
me.request.onreadystatechange = me.callback;
}else{
me.request.onreadystatechange = me.callback();
}不知道跟括号有关系不,俺试下先~
me.request.onreadystatechange = me.callback;
}else{
me.callback();
}貌似这样可以~猜测:是不是同步的情况下用不到回调。
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
LZ也可以看看jquery里面是怎么实现,参考下。
* 用法试例:
* var obj = new myAjax();
* obj.send(url, "post", data, false, function(data){});
* -
* args_1 | 提交路径
* args_2 | 提交方式(get、post)
* args_3 | 提交数据(数组)
* args_4 | 是否同步(true-异步[默认],false-同步)
* args_5 | 回调函数
* -
* obj.request.responseText是服务器端(php)返回的数据,可以根据它来进行后续的判断
*/
var myAjax = function(){
var me = this;
this.args = arguments;
this.execCallBack = ""; this.createxmlHttpRequest = function(){
if(!me.request){
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}else{
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
} this.send = function(){
me.request = me.createxmlHttpRequest();
var send = "";
for(var item in arguments[2]){
send += "&" + item + "=" + arguments[2][item];
} if(arguments[1].toLowerCase() == "post"){
url = arguments[0];
}else{
url = arguments[0] + send
send = null;
} me.request.open(arguments[1].toLowerCase(), url, arguments[3]);
me.execCallBack = arguments[4];
if(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3]) {
me.request.onreadystatechange = me.callback;
}
me.request.setRequestHeader("content-type", "application/x-www-form-urlencoded");
me.request.send(send);
if(!(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3])) {
if(arguments[3]){
me.request.onreadystatechange = me.callback;
}else{
me.request.onreadystatechange = me.callback();
}
}
} this.callback = function(){
if (me.request.readyState == 4 && me.request.status == 200){
new me.execCallBack(me.request.responseText);
}
}
}