Php 缓存Ajax请求
使用的语言/软件/技术:PHP、MySQL、WordPress、Javascript、最新jQuery。 我在一个页面上有两个选择元素——一个是州,一个是城市 state元素在document.ready上由对从数据库检索可用状态的函数的Ajax调用填充。城市元素是通过对state元素更改事件的Ajax调用来填充的,该调用基于所选状态中的可用城市,同样来自数据库 我正在尝试学习如何缓存可能不是正确的请求,以便在已经选择的州离开后重新选择的情况下,可用的城市仍然存在。例如,第一次选择选项时,我选择NC。我选择的下一个选择是纽约。然后我回到北卡罗来纳州;当前,在返回NC后再次进行ajax调用。我希望结果被存储起来,这样就不会有太多的查询被抛出。欢迎任何建议,我仍在挖掘!谢谢Php 缓存Ajax请求,php,javascript,ajax,jquery,Php,Javascript,Ajax,Jquery,使用的语言/软件/技术:PHP、MySQL、WordPress、Javascript、最新jQuery。 我在一个页面上有两个选择元素——一个是州,一个是城市 state元素在document.ready上由对从数据库检索可用状态的函数的Ajax调用填充。城市元素是通过对state元素更改事件的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,因为他想缓存客户端的城市。帖子永远不会被缓存。谢谢!我昨晚才明白这一点,不知道为什么我以前没有想到。嗯,那是肯定的。我最终使用了数组而不是对象,但您的示例给出了我需要的答案的概念。谢谢谢谢我昨晚才明白这一点,不知道为什么我以前没有想到。嗯,那是肯定的。我最终使用了数组而不是对象,但您的示例给出了我需要的答案的概念。谢谢