+ -
当前位置:首页 → 问答吧 → ajax post 在 ff3.6 中的问题

ajax post 在 ff3.6 中的问题

时间:2011-06-30

来源:互联网

小弟今天想要用AJAX POST方式向服务器上传一个大的字符串。
但是遇到了FF3.6 也就是Gecko 1.9的问题, FF会先向服务器发送一个OPTIONS请求。然后就没有然后了。

在网上找解决方法,发现把"Content-Type"改成"text/plain"就可以使用POST请求了,但是遇到了服务器500错误。

不知道各位大神有没有什么好的解决方案。


Mozilla的HTTP访问控制这里说跨域才会发送OPTIONS请求,但是没有跨域也会发送。不知道为什么。


求各位大神指点迷津

作者: jhrxx   发布时间: 2011-06-30

JScript code
var ajax = {//xmlhttp request
        tryList:function(){
            var xhr = null;
            for(var i=0;i<arguments.length;i++){
                var lambda = arguments[i];
                try{xhr = lambda();break;}catch(e){}
            }
            return xhr;
        },
        init:function(){
            return this.tryList(
                function(){return new ActiveXObject('MSXML2.XMLHttp.6.0');},
                function(){return new ActiveXObject('MSXML2.XMLHttp.3.0');},
                function(){return new XMLHttpRequest();},
                function(){return new ActiveXObject('MSXML2.XMLHttp.5.0');},
                function(){return new ActiveXObject('MSXML2.XMLHttp.4.0');},
                function(){return new ActiveXObject('Msxml2.XMLHTTP');},
                function(){return new ActiveXObject('MSXML.XMLHttp');},
                function(){return new ActiveXObject('Microsoft.XMLHTTP');}
                ) || null;
        },
        post:function(sUrl,sArgs,bAsync,fCallBack,errmsg){
            var xhr = this.init();
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.responseText){
                        if(fCallBack.constructor==Function){fCallBack(xhr);}
                    }else{
                        alert(errmsg);
                    }
                }
            };
            xhr.open('POST',encodeURI(sUrl),bAsync);
            xhr.setRequestHeader('Content-Length',sArgs.length);
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            xhr.send(sArgs);
        },
        get:function(sUrl,bAsync,fCallBack,errmsg){
            var xhr = this.init();
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.responseText){
                        if(fCallBack.constructor==Function){fCallBack(xhr);}
                    }else{
                        alert(errmsg);
                    }
                }
            };
            xhr.open('GET',encodeURI(sUrl),bAsync);
            xhr.send('Null');
        }
    }

ajax.post("地址","参数[name=value&name=value]这种形式",true,function(xhr){alert(xhr.responseText)},"错误提示字符")


用这个对象里封装的方法试试

作者: aspwebchh   发布时间: 2011-06-30

引用 1 楼 aspwebchh 的回复:
JScript code
var ajax = {//xmlhttp request
  tryList:function(){
  var xhr = null;
  for(var i=0;i<arguments.length;i++){
  var lambda = arguments[i];
  ……

能不能使用JQUERY呢,这个照样是先send 一个 OPTIONS 。

作者: jhrxx   发布时间: 2011-06-30