Jquery/Javascript-获取该会话的请求URL列表,就像在浏览器控制台中一样
我需要能够检索浏览器控制台中显示的请求URL列表,即:Jquery/Javascript-获取该会话的请求URL列表,就像在浏览器控制台中一样,javascript,php,jquery,Javascript,Php,Jquery,我需要能够检索浏览器控制台中显示的请求URL列表,即:GEThttp://mydomain.com/index.php?p=1&curr=GBP&cat=Food. 200。用户可以点击我的应用程序并应用不同的过滤器和滚动页面,我需要一些方法来跟踪这一点,以便我始终知道已经为该用户会话加载了哪些数据 我曾经考虑过使用PHPs$\u SERVER['REQUEST\u URI']并将它们保存在会话中,但是我不知道如何从JQuery访问这个会话,作为构建URL的JQuery 有人知道我如何从控制
GEThttp://mydomain.com/index.php?p=1&curr=GBP&cat=Food. 200
。用户可以点击我的应用程序并应用不同的过滤器和滚动页面,我需要一些方法来跟踪这一点,以便我始终知道已经为该用户会话加载了哪些数据
我曾经考虑过使用PHPs$\u SERVER['REQUEST\u URI']
并将它们保存在会话中,但是我不知道如何从JQuery访问这个会话,作为构建URL的JQuery
有人知道我如何从控制台访问这些数据吗?这可能吗?如果没有,谁能提出解决办法
到目前为止,我遇到的PHP/JQuery混乱:
<?php
session_start();
//keep track of requests.
if (!isset($_SESSION['requests'])) {
$_SESSION['requests'] = array();
} else {
if (!in_array( $_SERVER['REQUEST_URI'], $_SESSION['requests'])) {
$_SESSION['requests'][] = $_SERVER['REQUEST_URI'];
}
}
$requests = json_encode($_SESSION['requests']);
print_r($_SESSION['requests']);
print_r($requests); //these both have values
?>
//further down the page is the javascript
$('.filter a').click(function(e) {
var $this = $(this);
var $optionSet = $this.parents('.option-set');
var group = $optionSet.attr('data-filter-group');
filters[ group ] = $this.attr('data-filter-value');
//***more code for filtering etc******/
var paginate_url = $('.paginate a').attr('href');
//THIS IS PART I CANNOT GET WORKING
var visited_urls= <?=$requests?>;
//console.log($.parseJSON(visited_urls));
console.log(visited_urls); //is always empty
var pageno = ''; //somehow check to see if the URL that has been clicked exists int he requests array, if so get the page number and increment.
var next_url = UpdateQueryString(paginate_url, pageno, group, encodeURIComponent(filter_qry));
//页面下方是javascript
$('.filter a')。单击(函数(e){
var$this=$(this);
var$optionSet=$this.parents('.option set');
var group=$optionSet.attr('data-filter-group');
filters[group]=$this.attr('data-filter-value');
//***更多用于过滤等的代码******/
var paginate_url=$('.paginate a').attr('href');
//这是我无法工作的部分
var_url=;
//log($.parseJSON(已访问的URL));
console.log(已访问的URL);//始终为空
var pageno='';//以某种方式检查请求数组中是否存在已单击的URL,如果存在,则获取页码和增量。
var next_url=UpdateQueryString(paginate_url、pageno、group、encodeURIComponent(filter_qry));
这是我的建议:
PHP+Javascript实现:
$\u GET['cat']
从URL检索参数$\u SESSION['curr']=$\u GET['curr'];
为每个会话保存它们var curr=“”
使PHP会话变量可用于Javascriptvar x = <?php echo '123';?>;
console.log(x); //output '123' to Javascript console
在客户端:
//this will convert the PHP array to a Javascript array using json_encode
var visited_urls= <?php echo json_encode($_SESSION['visited']); ?>;
希望这有帮助!不清楚您希望通过此功能实现什么。您声明: 用户可以点击我的应用程序并应用不同的过滤器和滚动页面,我需要一些方法来跟踪这一点,以便我始终知道已经为该用户会话加载了哪些数据 你想用它实现什么,为什么浏览器的缓存对你来说不够? 我的解决方案是通过某种WebSocket()将服务器会话数组与浏览器中的对象同步
更新2: 可以按照Abel Melquiades Callejo的建议使用localStorage作为缓存存储,然后绕过HTTP请求从中读取。我会选择不同的内容保存到该缓存,不涉及服务器:
- 将自定义属性data-*添加到要缓存的每个HTML元素()
- 为所有具有该属性的HTML元素创建一个querySelectorAll()
- 从localStorage存储和检索文档现在应该很容易了,您需要一个命名文件的约定以便于查找
- 存储图像意味着执行base64转换,将数据大小增加34%(具有64kb的图像在本地存储中将占用86kb)
- 您需要一种方法来发现localStorage中的数据何时过时,并且需要向服务器发出请求(可能需要另一个data age属性来指定它何时过期)
更新1:关键是缓存机制极其复杂。更好的选择是使用默认浏览器缓存机制: 1.HTML5缓存清单
- 使用应用程序缓存脱机
- 让我们把它离线
- 使用应用程序缓存
- 使用应用程序缓存的初学者指南
- 优化缓存-利用浏览器缓存
- HTTP缓存常见问题解答
如果您想保存ajax调用中的url,同样的原则也适用,但请侦听ajaxSuccess事件并将请求中的url存储在回调中:,但我需要检查onclick事件上的会话,以查看会话数组中是否已经存在已选择的链接。如果存在,我需要增加页面n会话中保存的链接的编号。在选择链接之前,我看不出如何在PHP中执行此操作,因为在呈现页面时为时已晚。希望这有意义。@Leete我在回答中添加了更多信息,可以帮助您解决问题。希望这有帮助:)是的,我认为将会话数组转换为JSON是一个好主意,但是我得到了console.log的空值(已访问的URL),但是当我用PHP打印会话时,它不是空的empty@LeeTee您正在使用会话_start()在您的页面顶部?我已更新了原始查询中的代码,以准确显示我在index.php页面中所做的操作。我只有一个页面,因此只在页面顶部调用了会话_start();根据我对您问题的理解,您可能需要使用或,因为您想访问一些
//this will convert the PHP array to a Javascript array using json_encode
var visited_urls= <?php echo json_encode($_SESSION['visited']); ?>;
$(document).ready(function() {
var urls = JSON.parse(localStorage["visited"]) || [];//get the visited urls from local storage or initialize the array
if (urls.indexOf(document.URL) == -1) {//if current url does not exist in the array
urls.push(document.URL);//add it to the array
localStorage["visited"] = JSON.stringify(urls);//save a stringifyed version of the array to local storage
}
});
$(document).ready(function() {
// store an empty object in session storage when the page loads
sessionStorage.visited = JSON.stringify({});
});
$('a').on('click', function() {
var storage = JSON.parse(sessionStorage.visited),
href = $(this).attr('href');
// when we get a click check to see if this has been clicked before
if (!storage[href]) {
// if not save it and set the count to 1
storage[href] = 1;
} else {
// otherwise increment the count
storage[href]++;
}
sessionStorage.visited = JSON.stringify(storage);
});