【发布时间】:2012-10-20 09:22:10
【问题描述】:
我在使用 IE 时遇到了问题,大吃一惊吧?我有一个将姓名、电话和电子邮件提交到另一个域下的脚本的网络表单。我是 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
},
});
【问题讨论】:
-
@nathanhayfield:总是假设这些问题得到了可接受的答案。任何人都不应接受不能接受的答案,只是为了提高他们的评分。
-
好点,但我只是说
-
我是否可以建议,如果您对代码应用一些合理的缩进,这将使我们更容易理解,从而更容易发现任何问题?
-
你试过设置数据类型为jsonp吗?另外,为什么不使用标准的 jquery ajax 响应回调(成功、错误等)?如果 ajax 调用甚至找到 post url,您将始终获得 200。获得 200 并不意味着请求实际上已成功完成。
-
我没有尝试将dataType设置为jsonp。我也可以删除状态代码调用。任何使脚本更短的事情。 :)
标签: jquery cross-domain