Javascript 我的Ajax函数发出双重请求
这是我用来检查优惠券代码是否有效的功能Javascript 我的Ajax函数发出双重请求,javascript,ajax,Javascript,Ajax,这是我用来检查优惠券代码是否有效的功能 function checkCoupon(str){ if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new Activ
function checkCoupon(str){
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
alert('success');
}
}
xmlhttp.open("GET","https://www.example.com/inc/checkCoupon?id=45&coupon="+str,true);
xmlhttp.send();
}
我用
来调用这个
问题是,它正在打两个不同的电话。首先是页面的https://
版本,然后它立即被取消,之后它再次调用http://
版本,该版本由于混合内容而被拒绝
我也检查了它,我有多个功能来做同样的工作,但我在这个页面上只有一个功能
这是Inspect Element>>中的网络选项卡快照
上面是http://,下面是http://
感谢您的帮助。在发出https请求时,您似乎有一些活动的http内容。有关详细信息,请参阅 不过有一个问题,为什么不首先强制整个站点的通信通过https?这可以在htaccess文件中完成。 例如:
.htaccess
文件中确实有错误。这种类型的问题实际上是由于.htaccess
而发生的。我将回答一半的问题,因为我不知道另一半的答案
这是我的.htaccess
代码,用于重定向到www然后https://
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这其实没关系。我错过的是它下面的另一个代码。下面的代码用于强制URL中的尾部斜杠
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.example.com/$1/ [L,R=301]
正如您所看到的,我遗漏了代码中的最后一行。我已将尾部斜杠强制设置为http://www.exaple.com
实际上应该是https://www.exaple.com
。我错过了这里的http://
,实际上应该是https://
我不知道的另一半答案是:它仍然对每个AJAX查询调用发出双重请求。我有一个猜测,这一定是由于非www
到www
重定向,然后http://
到https://
重定向。但这仍然是我的猜测
多亏了@Martin,我至少意识到了自己的错误。有什么东西不止一次地调用了checktouch(str)吗?没有,我已经检查过了,但没有其他元素发出请求。我已经通过
将所有http://
重定向到https://
URL。htaccess
但是一切都是徒劳的。我还特别尝试了你的代码,但仍然不起作用@MartinOdd,我个人从来没有遇到过这个问题,但是从你的错误代码来看,它看起来确实像是活动的http内容错误,应该通过强制所有通信默认为https来修复。是的,我知道。这在我身上从未发生过。我从来没有过像那样的URL问题。如果它不允许,我将不得不重新开发一切。谢谢@Martin。你帮了我很多。
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.example.com/$1/ [L,R=301]