【发布时间】:2011-10-11 16:20:52
【问题描述】:
我有这个 ajax 调用,它在大多数情况下都有效,但它似乎确实记住了之前的结果。编辑:这可能是由于将行为绑定到了一个div。
我的例程结构是这样的:
调用ajax搜索输入是否正确,从php中获取响应。结果可以是“是”或“否”。
如果结果为“是”,则更改持有人 div 的颜色作为视觉提示,允许用户双击该 div 以运行另一个功能。如果没有,请不要允许双击 div 并且不要运行其他函数。
简单吧?除了当第一个 ajax 调用产生“是”结果,然后用户执行第二个 ajax 调用并产生“否”结果时,用户可以 dblclick 上“否”结果并执行用于“是”的操作' 结果。
我尝试取消绑定 dblclick,但它似乎不起作用,并且仍然允许单击 no 结果。这是我的 jquery 代码,我的常规 javascript 代码也有同样的不良行为。
编辑:这似乎是一个绑定问题。但我似乎可以解除绑定并销毁/删除以前绑定的行为。通过重复例程进行的进一步测试似乎表明 javascript 确实将这些绑定对象保存在内存中,因为当我多次重复错误例程时,警报会回显尽可能多的“已保存”绑定对象。
我的部分代码如下,感谢任何见解。
TIA
编辑:解决方案是取消绑定双击,我应该输入 dblclick 而不是双击
function search(input,divid) {
var queryString = "name=" + input+"&divid="+divid;
var url = "../l.php";
$.ajax({
type: 'get',
url: url,
data: queryString,
cache: false,
dataType: 'text',
timeout: 10000,
error: function(xhr, status, error) { alert('Search Error: '+ xhr.status+ ' - '+ error); },
success: function(response) {
var result = response;
var err = /:/;
var divid = "#"+divid;
if (result == "Yes" )
{
$(tldid).attr({'class':'tg1', 'title':'Doubleclick to save'});
var testword = 'xyz';
$(divid).dblclick(function() {
alert (testword);
$(divid).unbind('doubleclick');
});
else {
//alert (testword +" should not have been passed here, but it does");
$(divid).attr({'class':'tg2'});
}
}//success
});
}//end
【问题讨论】:
-
是的,当您的 URL 相同时,浏览器会在后续调用中从缓存中获取结果。请参阅stackoverflow.com/questions/948828/… 通过将时间戳或其他查询参数添加到 URL 来处理它
-
@sudmong:他已经设置了
cache: false。将缓存设置为 false 会将查询字符串参数“_=[TIMESTAMP]”附加到 URL -
@sudmong,我想你错过了理解我的问题,这不是浏览器缓存问题,我知道这个问题,我将缓存设置为 false。当我输入问题时,似乎是绑定问题。
-
我按照您的第一条语句进行了说明,“但它似乎确实记住/缓存了以前的结果。” ???
-
@sudmong,对不起语言混乱,我不知道错误是什么,所以我无法准确命名。
标签: javascript jquery ajax