0

我正在创建一个我想在 javascript 上用作类的函数。我的函数将调用一个使用 php parse json 创建的 JSON 页面,并设置变量,但它不起作用。你能给我一些提示吗?这是代码,提前谢谢:

function SiteParams(){
    $.getJSON("parse/parametri.php",function(data){
        $.each(data,function(index,value){
            this.NomeSito = value.nomesito;
            this.URLSito = value.urlsito;
            this.EmailAutore = value.email;
            this.NomeAutore = value.nomeautore;
        });
    });
}
var website = new SiteParams();
function ModuleBase(){
    $("<div/>",{id:"title", text:website.NomeSito}).appendTo("#main");
}
4

3 回答 3

1

getJSON 是异步的,所以需要传递一个回调函数。尝试这个:

function SiteParams(cb){
    $.getJSON("parse/parametri.php",function(data){
        $.each(data,function(index,value){
            this.NomeSito = value.nomesito;
            this.URLSito = value.urlsito;
            this.EmailAutore = value.email;
            this.NomeAutore = value.nomeautore;
            cb(this);
        });
    });
}
new SiteParams(ModuleBase);
function ModuleBase(website){
    $("<div/>",{id:"title", text:website.NomeSito}).appendTo("#main");
}
于 2013-08-08T22:54:14.060 回答
1

这是一个使用的好地方$.Deferred

function SiteParams(){
    // create a private deferred, and expose the promise:
    var d = new $.Deferred();
    this.load = d.promise();

    var that = this;
    $.getJSON("parse/parametri.php", function(data) {
        // your $.each only used one value anyway
        var value = data[0];

        // copy the data across
        that.NomeSito = value.nomesito;
        that.URLSito = value.urlsito;
        that.EmailAutore = value.email;
        that.NomeAutore = value.nomeautore;

        // resolve the promise
        d.resolve();
    });
}

var s = new SiteParams();
s.load.done(function() {
    $("<div/>", {id:"title", text: s.NomeSito}).appendTo("#main");
});
于 2013-08-08T23:10:19.500 回答
1

this在回调$.each(和回调getJSON)中有错误。尝试that

function SiteParams(){
    var that = this;
    $.getJSON("parse/parametri.php",function(data){
        $.each(data,function(index,value){
            that.NomeSito = value.nomesito;
            that.URLSito = value.urlsito;
            that.EmailAutore = value.email;
            that.NomeAutore = value.nomeautore;
        });
    });
}

each请注意,如果您的响应仅包含单个对象,则循环没有多大意义。如果它包含多个对象,每个对象都会覆盖前一个对象。因此,如果您的响应确实是一个包含单个项目的数组,您可以简单地使用它:

function SiteParams(){
    var that = this;
    $.getJSON("parse/parametri.php",function(data){
        that.NomeSito = data[0].nomesito;
        that.URLSito = data[0].urlsito;
        that.EmailAutore = data[0].email;
        that.NomeAutore = data[0].nomeautore;
    });
}
于 2013-08-08T22:51:38.330 回答