Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery/Javascript-获取该会话的请求URL列表,就像在浏览器控制台中一样_Javascript_Php_Jquery - Fatal编程技术网

Jquery/Javascript-获取该会话的请求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 有人知道我如何从控制

我需要能够检索浏览器控制台中显示的请求URL列表,即:
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实现:

  • 在PHP中,使用$\u GET['curr']和
    $\u GET['cat']
    从URL检索参数

  • 使用
    $\u SESSION['curr']=$\u GET['curr'];
    为每个会话保存它们

  • 在Javascript/jQuery上,使用
    var curr=“”
    使PHP会话变量可用于Javascript
  • 基本上,拥有良好的PHP/Javascript持久内存的关键在于,您可以使用以下命令将PHP内容设置为Javascript变量:

    var 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属性来指定它何时过期)
    但是,此localStorage解决方案仅限于少量数据,请参阅此问题。因此,尽管我现在看到您的要求是可能的,但由于localStorage的大小限制,我强烈推荐下面更新1中的解决方案


    更新1:关键是缓存机制极其复杂。更好的选择是使用默认浏览器缓存机制:

    1.HTML5缓存清单
    • 使用应用程序缓存脱机
    • 让我们把它离线
    • 使用应用程序缓存
    • 使用应用程序缓存的初学者指南
    2.服务器对HTTP请求的响应头
    • 优化缓存-利用浏览器缓存
    • HTTP缓存常见问题解答

    我不完全确定您想做什么,但我认为您可以跳过PHP,只使用JavaScript和sessionStorage:或localStorage:(取决于数据的持久性)

    例如,如果我想监听对“a”标记的所有单击,并跟踪这些HREF是否已被访问(以及访问次数)


    如果您想保存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);
    });