IE没有在POST后读取GET成功

时间:2012-11-29 19:56:12

标签: ajax internet-explorer

我有一个紧急问题,我似乎无法找出为什么IE在帖子之后没有读取我的成功。请有人帮助我尽快。我尝试过cache:false。没运气 。这适用于所有其他浏览器,而不是IE

       $.ajaxSetup({ cache: false });
        num = $('#num').val();
        phone = $('#phone').val();

        $.post("post.php?"+$("#MYFORM").serialize(), {

        }, function(response){

            if(response==1 && codeVal == 1 && telVal == 1)
            {
                $("#after_submit").html('');
                $("#Send").after('<label class="success" id="after_submit">Η αποστολή πραγματοποιήθηκε</label>');
                change_captcha();
                clear_form();
                $.ajax({
                        type:'get',
                        cache: false,
                        url: "http://web.somesite/submit_code.php",
                        dataType: 'html',
                        data:{ user: "one", pass: "mtwo", source: "WEB", receipt: num, msisdn: phone},
                        success: function(data) { 
                            var qsFull = "http://web.somesite.gr/submit_code.php?" + data;
                            var qs = URI(qsFull).query(true);
                            TINY.box.show({html:qs.message,animate:false,boxid:'error',top:5});
                        }
                    });
            }
            else
            {
                $("#after_submit").html('');
                $("#Send").after('<label class="error" id="after_submit">Error! in CAPTCHA .</label>');
            }
        });

好的,我尝试在成功后添加错误,我看到我的弹出应该是,但qs.message的值是0。嗯。为什么我会得到错误而不是成功。当它在其他浏览器中成功时。

2 个答案:

答案 0 :(得分:1)

我找到了答案,它与IE不具备跨域等灵活性有关,所以我添加了一个XDomainRequest,如此

    if (jQuery.browser.msie && window.XDomainRequest) {
                           var xdr = new XDomainRequest();
                           var my_request_data = { user: "M1web", pass: "m!", source: "WEB", receipt: num, msisdn: phone};
                           my_request_data = $.param(my_request_data);



                                if (xdr) {
                                    xdr.onerror = function () {
                                       alert('xdr onerror');
                                    };
                                    xdr.ontimeout = function () {
                                       alert('xdr ontimeout');
                                    };
                                    xdr.onprogress = function () {
                                       alert("XDR onprogress");
                                    alert("Got: " + xdr.responseText);
                                    };
                                    xdr.onload = function() {
                                        //alert('onload  ' + xdr.responseText);
                                        var qsFull = "http://web.web.gr/submit_code.php?" + xdr.responseText;
                                        var qs = URI(qsFull).query(true);
                                        TINY.box.show({html:qs.message,animate:false,boxid:'error',top:5});
                                        callback(xdr.responseText);
                                    };
                                    xdr.timeout = 5000;
                                    xdr.open("get", "http://web.web.gr/submit_code.php?" + my_request_data);
                                    xdr.send();
                                } else {

                                }
                 }

答案 1 :(得分:1)

我遗憾地不得不在遗留IE行为中做一个速成课程,这篇文章非常有帮助。以下是一些其他链接,可以帮助那些必须处理这些问题:

这是我在必要时用作后备的函数:

// This is necessary due to IE<10 having no support for CORS.
function fallbackXDR(callObj) {
    if (window.XDomainRequest) { 
        var xdrObj = new XDomainRequest();
        xdrObj.timeout = callObj.timeout;
        xdrObj.onload = function() {
            handleSuccess(xdrObj.responseText);
        };
        xdrObj.onerror = function() {
            handleError(xdrObj);
        };
        xdrObj.ontimeout = function() {
            callObj.xdrAttempts = callObj.xdrAttempts++ || 1;
            if (callObj.xdrAttempts < callObj.maxAttempts) {
                fallbackXDR(callObj);
            }
        };
        xdrObj.onprogress = function() {
            // Unfortunately this has to be included or it will not work in some cases.
        };

        // Use something other than $.param() to format the url if not using jQuery.
        var callStr = callObj ? '?'+$.param(callObj.urlVars) : '';
        xdrObj.open("get", callObj.url+callStr);
        xdrObj.send();
    } else {
        handleError("No XDomainRequest available.", callObj);
    }
}//fallbackXDR()