我的Ajax函数正在提出双重请求

时间:2018-05-24 13:35:37

标签: 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 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();
    }

我正在使用<input onchange="checkCoupon(this.value)" placeholder="Coupon">来调用它。

问题是,它正在进行两次不同的通话。该页面的首个https://版本会在http://版本上再次调用后因混合内容而被拒绝后立即取消。

我也检查了它我有多个功能来完成同样的工作,但我在这个页面上只有一个功能。

以下是Inspect Element&gt;&gt;中的网络标签的快照https://imgur.com/a/fQnXuQ1

以上为https://,以下为http://

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

当您发出https请求时,似乎您有一些有效的http内容。有关详细信息,请参阅here

但问题是,为什么不强迫整个网站的通信首先通过https进行?这可以在htaccess文件中完成。 例如:

©

答案 1 :(得分:1)

.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查询调用发出双重请求。我对它有一个猜测,它必须归因于non-wwwwww重定向,然后是http://https://重定向。但我仍然猜测。

感谢@Martin,我至少了解了我的错误。