Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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
Php 缓存Ajax请求_Php_Javascript_Ajax_Jquery - Fatal编程技术网

Php 缓存Ajax请求

Php 缓存Ajax请求,php,javascript,ajax,jquery,Php,Javascript,Ajax,Jquery,使用的语言/软件/技术:PHP、MySQL、WordPress、Javascript、最新jQuery。 我在一个页面上有两个选择元素——一个是州,一个是城市 state元素在document.ready上由对从数据库检索可用状态的函数的Ajax调用填充。城市元素是通过对state元素更改事件的Ajax调用来填充的,该调用基于所选状态中的可用城市,同样来自数据库 我正在尝试学习如何缓存可能不是正确的请求,以便在已经选择的州离开后重新选择的情况下,可用的城市仍然存在。例如,第一次选择选项时,我选择

使用的语言/软件/技术:PHP、MySQL、WordPress、Javascript、最新jQuery。 我在一个页面上有两个选择元素——一个是州,一个是城市 state元素在document.ready上由对从数据库检索可用状态的函数的Ajax调用填充。城市元素是通过对state元素更改事件的Ajax调用来填充的,该调用基于所选状态中的可用城市,同样来自数据库 我正在尝试学习如何缓存可能不是正确的请求,以便在已经选择的州离开后重新选择的情况下,可用的城市仍然存在。例如,第一次选择选项时,我选择NC。我选择的下一个选择是纽约。然后我回到北卡罗来纳州;当前,在返回NC后再次进行ajax调用。我希望结果被存储起来,这样就不会有太多的查询被抛出。欢迎任何建议,我仍在挖掘!谢谢

function get_cities(state){
    $.ajax({
        type:'POST',
        data:{action:'generate_city_inputs', state:state},
        cache: true,
        dataType: 'json',
        async:false,
        url: "<?php echo site_url().'/wp-admin/admin-ajax.php'; ?>",
        success: function(value) {
            cityhtml = '';
            for (var i = 0; i < value.length; i++) {
                cityhtml += "<option value=\"";
                cityhtml += value[i][0] + "\">";
                cityhtml += value[i][0] + "</option>";
            }
            $("select#search-city").empty().append(cityhtml);
        }
    });
}

在上面的代码中,状态是两个字母的代码,从state元素change事件传递到别处。此ajax调用调用的PHP函数使用state参数处理select语句。

我只需将状态的cities响应存储在如下对象中:

// Declared at the top of your script, global.
var cachedCities = {};
像这样更改get_cities代码,使其首先检查缓存。如果为空,则执行ajax调用。成功回调将填充缓存。填充选择框的代码被分解为populateCities


我会将该州的城市响应存储在如下对象中:

// Declared at the top of your script, global.
var cachedCities = {};
像这样更改get_cities代码,使其首先检查缓存。如果为空,则执行ajax调用。成功回调将填充缓存。填充选择框的代码被分解为populateCities


你确定上面的代码没有缓存吗?当你再次选择NC时,你得到的服务器响应代码是什么?你可能会发现你的服务器会为你缓存结果。如果你第二次得到304个这样的结果,那么服务器会给你一个缓存响应,而不是查询DB againI,因为他想缓存客户端的城市。帖子从不缓存。您确定上面的代码没有缓存吗?当你再次选择NC时,你得到的服务器响应代码是什么?你可能会发现你的服务器会为你缓存结果。如果你第二次得到304个这样的结果,那么服务器会给你一个缓存响应,而不是查询DB againI,因为他想缓存客户端的城市。帖子永远不会被缓存。谢谢!我昨晚才明白这一点,不知道为什么我以前没有想到。嗯,那是肯定的。我最终使用了数组而不是对象,但您的示例给出了我需要的答案的概念。谢谢谢谢我昨晚才明白这一点,不知道为什么我以前没有想到。嗯,那是肯定的。我最终使用了数组而不是对象,但您的示例给出了我需要的答案的概念。谢谢