2012-10-30 117 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/ –