2012-10-30 155 views
1

我遇到了IE的問題,大驚喜吧?我有一個網絡表單提交姓名,電話和電子郵件給另一個域下的腳本。我是jquery.ajax來提交表單。我也使用jquery.validate進行表單驗證。姓名和電子郵件是必需的。手機是可選的。jQuery ajax跨域與IE提交表單提交問題

當我在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 

}, 
}); 
+1

@nathanhayfield:總是假設這些問題接受了可接受的答案。沒有人應該接受僅僅爲了保持其利率而不能接受的答案。 –

+0

好點,但我只是說 –

+0

我可以建議,如果你對你的代碼應用了一些合理的縮進,它會讓我們更容易跟隨,因此更容易發現任何問題? – nnnnnn

回答

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(); 
        } 
       } 
      }; 
     } 
    }); 
} 
+0

感謝林的答案。我現在要試試這個。男孩,我希望它有效! – Robbiegod

+0

Lyn,我試着把這段代碼放在這一行的上方:「jQuery.validator.setDefaults({」 - 它似乎沒有做任何事情。 – Robbiegod

+0

這是一個可以玩的小提琴:http://jsfiddle.net/5akqP/1/ –