2010-12-28 1 views
1

표준 AJAX 쿼리 :자바 스크립트/jQuery를 변수 문제 (아마도 캐시 문제) jQuery로

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

성공() 함수는 나는 그것이 글로벌 선언했던 이유 globaltitle를 사용합니다.

success() 함수에서도 console.log (globalTitle)를 사용합니다. 끊임없이 나에게 "a"를 준다. 그것은 변수가 할당 된 것과 같지만 success()가 호출 될 때마다 캐시됩니다.

FF 4 및 Chrome 8에서 발생합니다.

편집 : 나는 이런 식으로 뭔가를합니다 (var xhr =xhr.cpTitle 비트는이 작업의 핵심이다) 할 것

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); 
    } 
} 
+2

게시 할 수 있습니다 성공()' – zsalzbank

+0

당신은 성공 방법에서 일어나는 것처럼 globalTitle을 어떻게 업데이트합니까? 그 방법을 게시하고 우리가 도울 수 있어야합니다 – Baz1nga

+0

게시 됨 지금 최대 – bcoughlan

답변

1

: 여기에 성공() 함수입니다.

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() 내부 이므로주의 : globalTitle은 (어떤 응답이 수신 된 모든 전에) 페이지가 요청 될 때마다 덮어 쓰기 때문에 항상 마지막 요청이 있었는지의 값을 가지게됩니다 이것은이다 폐쇄)을 생성하여 다른 방법으로이 문제를 방지createpage() :

function createpage(title) { 

    function success(data, status, xhr) { 
     console.log(title); 
    } 

    console.log(title); 

    $.ajax({ 
     method: "post", 
     url: "createpage.php", 
     data: { 
      id: title 
     }, 
     context: document.body, 
     success: success 
    }); 

} 
+0

첫 번째 해결책을 시도, 완벽하게 일했다. 정말 고맙습니다. 그래도 내 원래 코드의 동작은 완전히 엉망입니다. – bcoughlan

1

문제는 createpage 동 기적으로 호출되고,하지만 설정됩니다 어떤 globaltitle 보장이 없다, 그래서 성공 기능은 비동기 적으로 호출됩니다 ~에 암탉 성공을 실행합니다. globaltitle을 전체 스크립트 대신 createpage로 글로벌하게 만드십시오.

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); 
     } 
    }); 
} 
+0

그건 내 첫 번째 생각했지만 jquery "async : false"를 사용하여 시도 했으므로 한 번에 하나의 요청을 만듭니다 ... 같은 결과. createpage()에서 globaltitle을 선언하면 success()가 찾을 수 없습니다. – bcoughlan