count按钮使用纯javascript Ajax将当前页面URL传递给php变量

count按钮使用纯javascript Ajax将当前页面URL传递给php变量,javascript,php,ajax,Javascript,Php,Ajax,我尝试使用纯javascript Ajax将当前页面URL(window.location.href)传递给php变量$\u请求['URL']。我做错了什么 Counter.js: “严格使用”; let clicks=document.querySelectorAll('.Counter trigger');//IE8 let voted=localStorage.getItem('voted'); 让message=document.getElementById('Counter-messa

我尝试使用纯javascript Ajax将当前页面URL
window.location.href
)传递给php变量
$\u请求['URL']
。我做错了什么

Counter.js:

“严格使用”;
let clicks=document.querySelectorAll('.Counter trigger');//IE8
let voted=localStorage.getItem('voted');
让message=document.getElementById('Counter-message');
let count=document.getElementById('Counter-count');
让我;
让url;
让邮政;
让xhr;
for(设i=0;i
CounterReq.php

$url=$\u请求['url'];//从第页发布
$origin=$\u SERVER['DOCUMENT\u ROOT'].解析url($url,PHP\u url\u路径);
$file='_Counter.txt';//计数保存在此文档中
$file_path=$origin.“\u Counter.txt”;//计数保存在这里
$count=文件获取内容($file\u路径);
如果($count==null){$count=0;echo$count;
}
$count++;//按1递增计数
$handle=fopen($file_路径,“w+”);
羊群($handle,LOCK_EX);//LOCK_EX(2)写入访问的独占锁定
fwrite($handle,$count);
羊群($handle,LOCK_UN);//LOCK_EX(3)释放锁
fclose($handle);//关闭文件
index.php


投票
“.$count.”次
console.log: 注意:未定义索引:第5行/var/www/dist/lib/Counter/CounterReq.php中的url

注意:未定义的索引:第5行/var/www/dist/lib/Counter/CounterReq.php中的url

此通知意味着您正在查找不存在的关联数组中的索引。
让我们来解决这个问题

将要发送的数据存储在
FormData
对象中

let url = window.location.href;
const data = new FormData()
data.set('url', url);
将“内容类型”修改为
“多部分/表单数据”
或将其删除。
FormData
实例将自动设置正确的标题

xhr.setRequestHeader('Content-Type', 'multipart/form-data');
使用
.Send
方法将数据发送到服务器

xhr.send(data);
使用
$\u POST
全局数组而不是
$\u GET
,您通过
POST
方法发送数据,因此它将位于前者中

您发送到服务器的数据现在已作为关联数组处理。检查
url
的键是否存在于中,如果存在,则将其存储

$url = isset( $_POST['url'] ) ? $_POST['url'] : '';
注意:未定义的索引:第5行/var/www/dist/lib/Counter/CounterReq.php中的url

此通知意味着您正在查找不存在的关联数组中的索引。
让我们来解决这个问题

将要发送的数据存储在
FormData
对象中

let url = window.location.href;
const data = new FormData()
data.set('url', url);
将“内容类型”修改为
“多部分/表单数据”
或将其删除。
FormData
实例将自动设置正确的标题

xhr.setRequestHeader('Content-Type', 'multipart/form-data');
使用
.Send
方法将数据发送到服务器

xhr.send(data);
使用
$\u POST
全局数组而不是
$\u GET
,您通过
POST
方法发送数据,因此它将位于前者中

您发送到服务器的数据现在已作为关联数组处理。检查
url
的键是否存在于中,如果存在,则将其存储

$url = isset( $_POST['url'] ) ? $_POST['url'] : '';

您需要对要发送的变量进行URL编码并命名;换岗

let post = 'url=' + encodeURIComponent(url);
它应该很好用

编辑:我没有注意到您使用的是
\u GET
数组而不是
\u POST
。正如另一个答案所说,也要做出改变


但是,没有必要使用JSON
application/x-www-form-urlencoded
也可以正常工作。

您需要对要发送的变量进行urlencode编码并命名;换岗

let post = 'url=' + encodeURIComponent(url);
它应该很好用

编辑:我没有注意到您使用的是
\u GET
数组而不是
\u POST
。正如另一个答案所说,也要做出改变


但是,没有必要使用JSON
application/x-www-form-urlencoded
也很好。

对不起,这是我的错误;这个问题不正确。现在:$\u REQUEST['url']而不是$\u GET['url']对不起,这是我的错误;这个问题不正确。现在:$\u REQUEST['url']而不是$\u GET['url']谢谢,我接受了你的建议。除其他外,我删除了//xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');工作很好。谢谢,我接受了你的建议。除其他外,我删除了//xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');它的工作很好。