gpt4 book ai didi

Javascript 不在 IE 中提交表单

转载 作者:行者123 更新时间:2023-11-29 20:05:15 26 4
gpt4 key购买 nike

此表单适用于 Chrome、FF、Safari。我所说的工作是指当我点击提交按钮时,我可以看到发送了 POST 请求。

但是,在 IE9 等 IE 的开发者工具中,我看不到任何 POST 请求。有什么想法吗?

这里是一个临时站点的链接以帮助调试:http://polar-ravine-7414.herokuapp.com/

重现错误的步骤:

  1. 加载页面
  2. 忽略弹出窗口
  3. 点击提交按钮
  4. 我看到在 Chrome 开发工具和 FF Firebug 中发送了一个 POST 请求但不在 IE 开发者工具中

更新

根据 Eliran 的建议,我更新了选择器。但是,我在IE开发者工具网栏里还是看不到POST请求。

更新2

我应该补充一点,这个页面托管在与发布表单的服务器不同的服务器上。这现在可能是由于浏览器阻止了跨浏览器请求吗?

HTML

<form name="newsletter-subscription-en" id="form" action="https://abc.com/e/f2" method="post">

<input type="hidden" name="elqFormName" value="newsletter-subscription-en">
<input type="hidden" name="elqSiteID" value="1795">
<input type="hidden" id="firstNameField" name="C_FirstName" value="">
<input type="hidden" id="lastNameField" name="C_LastName" value="">

<div id="step1" class="block">
<div id="circle_1" class="circle">
<div id="bullet_1" class="left white is-bold s24"><span class="bullet">1.</span></div>
</div>
<div id="bullet_spacer_1" class="left">&nbsp;</div>
<div class="content">
<p class="white is-regular s18">This is the email you will be subscribing with, if you'd like to change it, please enter here now.</p>
<label id="label_email" class="white is-bold s22" for="emailField">YOUR EMAIL: </label>
<input id="emailField" value="" name="C_EmailAddress" type="text">
</div>
</div>

<div class="clearfix"></div>
<div id="step2" class="block">
<div id="circle_2" class="circle">
<div id="bullet_2" class="left white is-bold s24"><span class="bullet">2.</span></div>
</div>
<div id="bullet_spacer_2" class="left">&nbsp;</div>
<div class="content">
<p class="white is-regular s18">Choose your newsletter:</p>
<div id="checkbox_customer" class="left">
<div class="box">
<input id="elqInput31" type="checkbox" name="elqInput31" checked="checked">
<label class="white is-bold s20" for="elqInput31">CUSTOMER</label>
</div>
<div class="arrow-up"></div>
<div class="nip_box">
<span class="is-bold s12">Customer Newsletter</span>
<p class="is-light s115">
Monthly collective on latest industry news, technology pieces from experts, product resources, success examples and exclusive customer promotions.
</p>
</div>
</div>

<div id="spacer" class="left">&nbsp; </div>
<div id="checkbox_training" class="left">
<div class="box">
<input id="elqInput32" type="checkbox" name="elqInput32" checked="checked">
<label class="white is-bold s20" for="elqInput32">TRAINING</label>
</div>
<div class="arrow-up"></div>
<div class="nip_box">
<span class="is-bold s12">Training Newsletter</span>
<p class="is-light s115">
Exclusive newsletter for current and aspiring IT professionals. Updated with training tips and tricks, industry news, free online training resources and latest information on available certification and training.
</p>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
<div id="step3" class="block">
<div id="circle_3" class="circle">
<div id="bullet_3" class="left white is-bold s24"><span class="bullet">3.</span></div>
</div>
<div id="bullet_spacer_3" class="left">&nbsp;</div>
<div class="content">
<div id="submit" class="box right">
<span class="right white is-bold s24">SIGN-UP</span>
</div>
</div>
</div>
<div class="clearfix"></div>
</form>

JavaScript

根据 Eliran 的回答更新

$(document).ready(function() {

$('#submit').click(function () {

//Get the data from all the fields
var email = $('input[name=C_EmailAddress]');
var trainingNewsletter = $('input[name=elqInput31]');
var customerNewsletter = $('input[name=elqInput32]');
var regExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
var validationPass = true;
var form = $('#redhat_form');

if (validationPass === true) {
$.post(form.attr('action'), form.serialize(), function(data) {});
$('#alert').removeClass('hide');
$('#alert').removeClass('alert-success');
$('#alert').removeClass('alert-error');
$('#alert_text').remove();
$('#alert').addClass('alert-success');
$('#alert').append('<p id="alert_text" class="is-regular s16">Thank you for subscribing.</p>');
$('#emailField').val("");
//window.location='http://afternoon-leaf-7565.herokuapp.com/thankyou/';
return false;
}
});
});

最佳答案

好的,您面临的问题是 AJAX 调用在 IE 中没有成功返回,而是抛出错误。首先,您需要正确编写 AJAX 调用代码。这是 AJAX 调用的更新代码。

$.ajax({
url: form.attr('action'),
data: form.serialize(),
success: function(data){
alert('success');
},
error: function(xhr, textStatus, errorThrown){
alert(errorThrown);
},
dataType: 'json'
});

现在它在 IE 中抛出错误的原因是“无传输”。发生这种情况是因为跨域 AJAX 调用。这是 jQuery 的一个已知错误。 jQuery 团队“没有计划在核心中支持它,更适合作为插件”。 IE 不使用 XMLHttpRequest,而是使用名为 XDomainRequest 的替代对象。

我找到了一个 javascript 代码来处理这个问题。密码是here .

您需要将代码复制到文件中并将其用作您网页的外部源。或者您可以直接将其嵌入页面的头部。工作示例 here .

关于Javascript 不在 IE 中提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com