2012-04-04 16 views
5

javascript nesnelerimin değerlerini kaydetmek için jQuery kullanıyorum. Eklenen nesnenin kimliğini veritabanından geri almam gerekir. Kaydet işlevi javascript nesnesinde ise, bunu nasıl yapacağımı biliyorum (aşağıdaki kod). Ancak, Kaydet işlevi javascript nesnesinde değilse, ID değişkenini nasıl ayarlayabilirim?jquery kullanarak javascript nesnelerini kaydetme ve veritabanından bir kimlik geçirme

Çalışma:

Person = function() { 
    var self = this; 

    self.ID; 
    self.Name; 
    self.SurName; 

    self.Save = function() { 
     $.ajax({ 
      type: "POST", 
      url: "Save", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ Name: self.Name, SurnName: self.SurName }), 
      dataType: "json", 
      success: function (result) { 
       var ID = result.d.ID; //this is the ID retreived from database 
       self.ID = ID; //set the ID, it works, since I can reference to self 
      } 
     }); 
    }; 
}¨ 

Yani şimdi (Kişi sınıfının dışında!) Bir işlevi gibi uygulamak nasıl:

SavePerson = function(p) { 
    $.ajax({ 
     type: "POST", 
     url: "Save", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify({ Name: p.Name, SurnName: p.SurName }), 
     dataType: "json", 
     success: function (result) { 
      var ID = result.d.ID; //this is the ID retreived from database 
      p.ID = ID; //set the ID, it doesn't work, becouse if I call SavePerson repetedly for different objects, a p will not be a correct person. 
     } 
    }); 
}; 
+0

p global nesne değil, bir şekilde bu kimlik değerini korumak istiyorsanız böylece başka bir şey ayarlamak gerekir. –

+0

Kodunuzu denediniz mi? Kodunuz aslında çalışmalıdır. Trickyzter tarafından işaret edilen asenkronize olmanın bazı sorunları olduğunu unutmayın. Çalıştığını görmek için ajax çağrılarınızı 'async: false' öğesine eklemeyi deneyin. – Prusse

+0

Birkaç soru: - Nereden Kaydetme Fonksiyonunuzu arayacaksınız? - 'p' referansını kaydetme işlevine nasıl geçiyorsunuz? – Taher

cevap

1

Sadece açıklığa kavuşturmak için, Kişi nesnesi kimliği özelliğinin son kaydetme ile güncellenmesini ister misiniz? Eğer öyleyse, aşağıdaki betik yeterli olur. Gecikmeli isteğin tamamlanmasından sonra p.ID'nin yalnızca güncellendiğinden emin olmak için ertelenmiş değerleri kullandım.

$.Person = function() { 
    var self = this; 
    self.ID; 
    self.Name; 
    self.SurName; 
} 

$.SavePerson = function() { 
var dfd = $.Deferred(); 
    $.ajax({ 
     type: "POST", 
     url: "Save", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify({ Name: p.Name, SurnName: p.SurName }), 
     dataType: "json", 
     success: dfd.resolve 
    }); 
return dfd.promise(); 
}; 

var p = new $.Person(); 

$.SavePerson().then(function(result){ 
    p.ID = result.d.ID; 
}); 
0

Orada bunu yapmak için daha iyi yollar olabilir ama olurdu benim veritabanım aynı zamanda Ad ve Soyad ile birlikte ID ile birlikte dönüp, başarı fonksiyonunda doğru nesneyi bulmak için Kişi listemi ara.

0

Belki de bu sizin arzuladığınız şeydir?

Burada bazı kod ödünç: İkinci örnekte

/*** makeClass() *** 
* The following allows us to easily create 
* Javascript classes. Source of this: 
* http://ejohn.org/blog/simple-class-instantiation/ 
* makeClass - By John Resig (MIT Licensed) 
*/ 

function makeClass() { 
    return function(args) { 
     if (this instanceof arguments.callee) { 
      if (typeof this.init == "function") this.init.apply(this, args.callee ? args : arguments); 
     } else return new arguments.callee(arguments); 
    }; 
}); 

/* set up ajax */ 
$.ajaxSetup({ 
    async: false, 
    type: "POST", 
    contentType: "application/json", 
    converters: { 
     "json jsond": function(msg) { 
      return msg.hasOwnProperty('d') ? msg.d : msg; 
     } 
    }, 
    data: '{}', 
    dataType: "json", 
    error: function(jqXHR, status, error) { 
     alert("An error occurred on the server. Please contact support."); 
    } 
}); 

/* set up my person class */ 
var personClass = makeClass(); 
personClass.prototype.init = function() { 
    this.ID = ''; 
    this.SurName = ''; 
    this.Name = ''; 
} 

/* create my save function */ 
personClass.prototype.SavePerson = function(p) { 
    this.Name = (typeof p === 'undefined') ? this.Name : p.Name; 
    this.SurName = (typeof p === 'undefined') ? this.SurName : p.SurName; 
    $.ajax({ 
     url: "Save", 
     data: JSON.stringify({ 
      Name: this.Name, 
      SurnName: this.SurName 
     }), 
     success: function(result) { 
      var ID = result.ID; //ID from database 
      this.ID = ID; //set the ID, 
     } 
    }); 
}; 
//create two persons 
var person1 = personClass(); 
var person2 = personClass(); 

//set person1 to be fred 
person1.Name = "Fred"; 
person1.SurName = "Flintstone"; 

// independent person 
var p = {Name: "Barney", SurName: ""}; 
p.Surname = "Rubble"; 

//save specific and the independent (as person2) 
person1.SavePerson(); 
person2.SavePerson(p); 

//alert the ID of both 
alert(person1.ID + ":" + person2.ID); 
İlgili konular