javascript/jQuery变量问题(可能是缓存问题)

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

使用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

    $.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);   
        }
    });
}