亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計數按鈕將帶有純 javascript Ajax 的當前頁面 URL 傳遞給 php 變量

計數按鈕將帶有純 javascript Ajax 的當前頁面 URL 傳遞給 php 變量

PHP
泛舟湖上清波郎朗 2022-07-02 16:52:40
我嘗試使用純 javascript Ajax將當前頁面 URL ( window.location.href)傳遞給php 變量。我究竟做錯了什么? $_REQUEST['url']計數器.js:'use strict';let clicks = document.querySelectorAll('.Counter-trigger'); // IE8let voted = localStorage.getItem('voted');let message = document.getElementById('Counter-message');let count = document.getElementById('Counter-count');let i;let url;let post;let xhr;for (let i = 0; i < clicks.length; i++) {  clicks[i].onclick = function () {    if (voted == 'voted') {      message.innerHTML = "Sorry, ...!!";    } else {      let url = window.location.href;      let post = url; // post string      let xhr = new XMLHttpRequest();      xhr.open('POST', './lib/Counter/CounterReq.php', true);      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');      xhr.onreadystatechange = function () {        if (xhr.readyState != 4 || xhr.status != 200) return;        console.log(xhr.responseText);        message.innerHTML = "Thanks!!";        count.innerHTML = +count.textContent+1;      };      xhr.send(post);      localStorage.setItem('rate', 'voted');      voted = 'voted';    }  }}CounterReq.php$url = $_REQUEST['url']; // posted from page$origin = $_SERVER['DOCUMENT_ROOT'].parse_url($url,PHP_URL_PATH);$file = '_Counter.txt'; // counts is saved in this document$file_path = $origin.'_Counter.txt'; // counts is saved here$count = file_get_contents($file_path);if ($count == null){$count = 0; echo $count;}$count++; // increment count by 1$handle = fopen($file_path, "w+");flock($handle,LOCK_EX); // LOCK_EX (2) exclusive locking for write accessfwrite($handle, $count);flock($handle,LOCK_UN); // LOCK_EX (3) Releases a lockfclose($handle); // close file
查看完整描述

2 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

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


該通知意味著您正在尋找不存在的關聯數組中的索引。

讓我們解決這個問題。


將要發送的數據存儲在FormData對象中。


let url = window.location.href;

const data = new FormData()

data.set('url', url);

將您的“內容類型”修改為'multipart/form-data'或將其全部刪除。實例將FormData自動設置正確的標頭。


xhr.setRequestHeader('Content-Type', 'multipart/form-data');

在方法中將數據發送到服務器.send。


xhr.send(data);

使用$_POST全局數組而不是$_GET,您正在通過該POST方法發送數據,因此它將在前者中。


您發送到服務器的數據現在已作為關聯數組進行處理。檢查密鑰是否url存在,如果存在則存儲。


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


查看完整回答
反對 回復 2022-07-02
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

您需要對要發送的變量進行urlencode并命名;將帖子更改為

let post = 'url=' + encodeURIComponent(url);

它應該可以正常工作。

編輯:我沒有注意到您使用的是_GET數組而不是_POST. 正如另一個答案所說,也要進行更改。

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


查看完整回答
反對 回復 2022-07-02
  • 2 回答
  • 0 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號