javascript/jQuery变量问题(可能是缓存问题)
使用jQuery的标准AJAX查询:javascript/jQuery变量问题(可能是缓存问题),javascript,jquery,ajax,Javascript,Jquery,Ajax,使用jQuery的标准AJAX查询: var globalTitle = ""; var pages = ["a", "b", "c"]; for (var i = 0; i < pages.length; i++) { createpage(pages[i]); } function createpage(title) { globalTitle=title; console.log (globalTitle); //All looks good here
var globalTitle = "";
var pages = ["a", "b", "c"];
for (var i = 0; i < pages.length; i++) {
createpage(pages[i]);
}
function createpage(title) {
globalTitle=title;
console.log (globalTitle); //All looks good here
$.ajax({
url: "createpage.php?id=" + title,
context: document.body,
success: success
});
}
var globalTitle=“”;
变量页=[“a”、“b”、“c”];
对于(变量i=0;i
success()函数使用globaltitle,这就是我必须将其声明为全局的原因
在success()函数中,通过console.log(globalTitle);经常给我一个“a”。这类似于分配变量,但每次调用success()时都会缓存该变量
发生在FF 4和Chrome 8中。有什么想法吗
编辑:下面是success()函数:
function success(text) {
console.log (globalTitle); // always "a"
var div1 = "<div id=\"" + globalTitle + "\">";
var text = "<a href=\"javascript:createpage('" + globalTitle + "')\">Retry</a> " + +text;
var div2 = "</div>";
if ($("#" + globalTitle).length) {
$("#" + globalTitle).html(text);
} else {
$("#ajax").append(div1+text+div2);
}
}
函数成功(文本){
console.log(globalTitle);//始终为“a”
var div1=“”;
var text=”“++text;
var div2=“”;
如果($(“#”+globalTitle).length){
$(“#”+globalTitle).html(文本);
}否则{
$(“#ajax”).append(div1+text+div2);
}
}
我会这样做(var xhr=和xhr.cpTitle
位是这项工作的关键)。这是因为globalTitle
在每次请求页面时都会被覆盖(在收到任何响应之前),因此它始终具有上次请求的值:
function createpage(title) {
console.log(title);
var xhr = $.ajax({
method: "post",
url: "createpage.php",
data: {
id: title
},
context: document.body,
success: success
});
xhr.cpTitle = title;
}
function success(data, status, xhr) {
console.log(xhr.cpTitle);
}
或者这(请注意,success()
位于createpage()
内,通过创建闭包以另一种方式避免此问题):
问题是createpage是同步调用的,但success函数将异步调用,因此无法保证在成功运行时globaltitle将设置为什么。尝试将globaltitle设置为全局以创建页面,而不是整个脚本
function createpage(title) {
$.ajax({
url: "createpage.php?id=" + title,
context: document.body,
success: function(data) {
console.log(title);
//you could call your success function here and pass it title
success(title);
}
});
}
您能否发布
success()
如何更新globalTitle?这看起来应该发生在您的success方法中。发布该方法,我们应该能够提供帮助这是我的第一个想法,但我尝试使用带有“async:false”的jquery,所以它一次只发出一个请求。。。同样的结果。如果我在createpage()中声明globaltitle,success()将无法找到它,因为第一个解决方案工作得很好。非常感谢你。但是,我仍然对我的原始代码的行为感到困惑。
function createpage(title) {
$.ajax({
url: "createpage.php?id=" + title,
context: document.body,
success: function(data) {
console.log(title);
//you could call your success function here and pass it title
success(title);
}
});
}