getJSON并发覆盖变量?

时间:2012-07-15 03:41:59

标签: php jquery concurrency getjson

我的javascript页面遇到了很多麻烦。

基本上,我有一个html / javascript页面,可以从php页面获取数据。我这样做了多次,将它们推入数组,然后显示数组。

这是代码的纲要

    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 个答案:

答案 0 :(得分:1)

更改此行:

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

使用new运算符:

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

然后在ArticleObject()函数中,您不需要说return this;因为this会在使用new调用函数时自动返回。

当您使用new调用该函数时,会发生什么事情.JavaScript创建一个继承自ArticleObject.prototype且在函数this内指向该新实例的新对象。当您在没有new的情况下调用该函数时,JavaScript会将this设置为window,因此每次您的函数运行时,它都会更新window上的相同属性。

有关使用new阅读what MDN has to say about it的详细信息。