【问题标题】:getJSON concurrency overwritting variables?getJSON并发覆盖变量?
【发布时间】:2012-07-15 12:48:44
【问题描述】:

我的 javascript 页面有很多问题。

基本上,我有一个从 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 存在问题。

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: php jquery concurrency getjson


    【解决方案1】:

    改变这一行:

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

    要使用new 运算符:

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

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

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

    有关使用new 的更多信息,请阅读what MDN has to say about it

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2017-02-25
      • 2021-08-24
      • 2020-09-30
      • 2015-12-04
      • 2013-06-06
      • 2018-02-27
      相关资源
      最近更新 更多