[英]My Ajax function is making double request
这是我检查优惠券代码是否有效的功能。
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://
版本,但由于内容混合而被拒绝。
我也检查过它有多个功能可以完成相同的工作,但是此页面上只有一个功能。
这是检查元素>> https://imgur.com/a/fQnXuQ1中“网络”选项卡的快照
上面是https://
,下面是http://
。
谢谢您的帮助。
发出https请求时,似乎有一些活动的http内容。 有关更多信息,请参见此处 。
但是,有一个问题,为什么不首先只是强制整个网站的通信通过https? 这可以在htaccess文件中完成。 例:
#Rewrite everything to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
.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-www
到www
重定向,然后是http://
到https://
重定向。 虽然这仍然是我的猜测。
多亏@Martin,我至少知道了我的错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.