2012-07-15 3 views
0

내 자바 스크립트 페이지에 많은 문제가 있습니다.getJSON 동시성 변수 덮어 쓰기?

기본적으로 PHP 페이지에서 데이터를 가져 오는 html/javascript 페이지가 있습니다. 이 작업을 여러 번하고 배열로 밀어 넣은 다음 배열을 표시합니다. 당신이 일을 끝낼 후 다음

var spawnedNewspaper = []; 
    var articlesToSpawn = null; 

    $("#generate").click(function() { 
     spawnNewspaper(); 
    }); 


    function spawnNewspaper(){ 

     if(itemsToSpawn==null){ 
      articlesToSpawn = 4; 
      spawnedNewspaper = []; 
     } 

     if(itemsToSpawn > spawnedNewspaper.length) 
      spawnAnItem(); 

     if(itemsToSpawn == spawnedNewspaper.length){ 
      itemsToSpawn = null; 
      // ... display the results 
     } 
    } 


    function spawnAnItem(nationalDexID, level, generateRandomBerry, generateRandomTMItem, generateRandomItem, knowsRandomTM, imageURL){ 
     $.getJSON("...url.../spawner_json.php?jsoncallback=?" , 
      { 
       dataitename: data 
      } 
      , spawnAnArticlePart2 
     );  
    } 


    function spawnAnArticlePart2(data){ 
     //returning from spawnAnItem callback 
     p = ArticleObject(data.heading, data.date, data.author) 

     spawnedNewspaper.push(p); 
     spawnNewspaper(); 
    } 


    function ArticleObject(heading, date, author){ 
     this.heading = heading; 
     this.date = date; 
     this.author = author; 
     return this; 
    } 

그래서 코드의 개요, 그것은 기사의 정확한 수를 내 배열을 보여 주지만, 나는 그것이 유일한 일 각을 생성하는 것 알고 때 각 기사 정확히 동일합니다 시각.

내 생각에 동시성 문제가 있으며 물건을 덮어 쓰는 중입니다 (push()를 사용하여 이상하게 들릴 수 있습니다). 내 ArticleObject에 문제가 있습니다.

해결 방법에 대한 의견이 있으십니까?

답변

1

변경이 라인은 :

p = new ArticleObject(data.heading, data.date, data.author) 

다음 ArticleObject() 함수 내에서 당신이 return this;this 때문에이 때 자동으로 반환됩니다 말할 필요가 없습니다

p = ArticleObject(data.heading, data.date, data.author) 

new 연산자를 사용하려면 함수는 new으로 호출됩니다.

new으로 함수를 호출하면 JavaScript가 ArticleObject.prototype에서 상속 받고 함수 내에서 this이 새 인스턴스를 가리키는 새 객체를 만듭니다. new없이 함수를 호출하면 JavaScript는 this에서 window으로 설정되므로 함수를 실행할 때마다 window에서 동일한 속성 만 업데이트됩니다.

new을 사용하는 방법에 대한 자세한 내용은 what MDN has to say about it을 참조하십시오.