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]