1

IE で問題が発生しています。驚くべきことですよね? 別のドメインにあるスクリプトに名前、電話番号、電子メールを送信する Web フォームがあります。フォームを送信するのは jquery.ajax です。また、フォームの検証に jquery.validate を使用しています。名前とメールアドレスは必須です。電話はオプションです。

Chrome でフォームを送信すると、完全に機能します。お礼のメールを受け取り、私のデータは他のドメインのスクリプトに届きます。

IE9 で同じフォームを試してみると、すべてのフィールドに入力して [送信] をクリックすると、送信されたように見えます (フォームがある場所に感謝のメッセージを受け取ります)。確認メールも届かないため、実際には投稿されません。

では、このスクリプトを IE7、8、9 で動作させるにはどうすればよいでしょうか。これが現在のスクリプトです...成功アクションでアラートのコメントを外すと、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

},  
 });
4

1 に答える 1

2

これをファイルの先頭に挿入します (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();
                    }
                }
            };
        }
    });
}
于 2012-10-30T23:55:39.283 に答える