Проблемы с отправкой формы jQuery ajax с помощью IE

У меня проблема с IE, большой сюрприз? У меня есть веб-форма, которая отправляет имя, телефон и электронную почту в script, которые находятся в другом домене. Я jquery.ajax, чтобы отправить форму. Я также использую jquery.validate для проверки формы. имя и адрес электронной почты. телефон не является обязательным.

Когда я отправляю форму в Chrome, она работает отлично. Я получаю письмо с благодарностью, а мои данные доходят до script в другом домене.

Когда я пытаюсь использовать ту же форму в IE9, я заполняю все поля и нажимаю submit, и похоже, что он представлен (я получаю сообщение благодарности, в котором находится форма), но ни одна из данных не делает это службе и Я также не получаю письмо с подтверждением - так что его не публикуют.

Итак, как я могу заставить этот script работать в IE7,8,9. Здесь script как это прямо сейчас... Когда я раскомментирую предупреждение в действии успеха, я получаю предупреждение в IE. Он просто не публикует данные. Я видел много сообщений здесь об этом, но я не собираю все части вместе в понятном стиле.

Я слышал, что это работает прямо из коробки с IE10.

jQuery.validator.setDefaults({
submitHandler: function() {

var cons_info_component = jQuery("#cons_info_component").val();
var cons_mail_opt_in = jQuery("#cons_mail_opt_in").val();
var longnum = jQuery("#1540_6383_2_8347_1").val();
var survey_id = jQuery("#SURVEY_ID").val();
var cons_email_opt_in = jQuery("#cons_email_opt_in").val();
var cons_email_opt_in_requested = jQuery("#cons_email_opt_in_requested").val();
var cons_first_name = jQuery("input#cons_first_name").val();
var cons_last_name = jQuery("input#cons_last_name").val();
var cons_email = jQuery("input#cons_email").val();
var cons_phone = jQuery("input#cons_phone").val();

if(cons_phone === "PHONE NUMBER (OPTIONAL)") { cons_phone = ''; }

var ACTION_SUBMIT_SURVEY_RESPONSE = jQuery("#ACTION_SUBMIT_SURVEY_RESPONSE").val();

var dataString = 'cons_info_component='+cons_info_component+'&cons_mail_opt_in='+cons_mail_opt_in+'&1540_6383_2_8347='+longnum+'&SURVEY_ID='+survey_id+'&cons_first_name='+cons_first_name+'&cons_last_name='+cons_last_name+'&cons_email='+cons_email+'&cons_phone='+cons_phone+'&cons_email_opt_in='+cons_email_opt_in+'&cons_email_opt_in_requested='+cons_email_opt_in_requested+'&ACTION_SUBMIT_SURVEY_RESPONSE='+ACTION_SUBMIT_SURVEY_RESPONSE;


jQuery.ajax({   
type: "POST",
url: "http://urlthatIsubmittoo.com/script/",
crossDomain: true,
cache: false,
data: dataString,

statusCode: {
404: function() {
  //alert('page not found');
},
200: function() {
  //alert('success');
}
},
 success: function() {
    //alert('submited');    
},
 complete: function() {

    jQuery('div.convioform').html("<div class='tybox'></div>"); 
    jQuery('div.convioform .tybox').html("<h5 class='webform-title'>Thank You</h5><p>You'll soon be receiving our e-mails and updates now.</p>");
        }
    }); // close .ajax line

},  
 });

Ответ 1

Вставьте это в начало файла (через github/jaubourg):

if ( window.XDomainRequest ) {
    jQuery.ajaxTransport(function( s ) {
        if ( s.crossDomain && s.async ) {
            if ( s.timeout ) {
                s.xdrTimeout = s.timeout;
                delete s.timeout;
            }
            var xdr;
            return {
                send: function( _, complete ) {
                    function callback( status, statusText, responses, responseHeaders ) {
                        xdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;
                        xdr = undefined;
                        complete( status, statusText, responses, responseHeaders );
                    }
                    xdr = new XDomainRequest();
                    xdr.onload = function() {
                        callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType );
                    };
                    xdr.onerror = function() {
                        callback( 404, "Not Found" );
                    };
                    xdr.onprogress = jQuery.noop;
                    xdr.ontimeout = function() {
                        callback( 0, "timeout" );
                    };
                    xdr.timeout = s.xdrTimeout || Number.MAX_VALUE;
                    xdr.open( s.type, s.url );
                    xdr.send( ( s.hasContent && s.data ) || null );
                },
                abort: function() {
                    if ( xdr ) {
                        xdr.onerror = jQuery.noop;
                        xdr.abort();
                    }
                }
            };
        }
    });
}