2010-11-18 16 views
0

İlk kez here hakkında öğrendiğim global değişkenleri kullanarak kaçmak için bir prototip kullanarak bir nesneyi nasıl başlatılacağını anlamaya çalışıyorum. Kabul edilen cevapta bulunan kodun kendi versiyonunu uygulamaya başladım.Genel değişkenleri doğru şekilde değiştirmek için nesneler kullanma

function XML_Data() { 
    this.data = null; 
} 

XML_Data.prototype = { 
GetXML: function() { 
    $.ajax({ 
    type: "GET", 
    url: "questions.xml", 
    dataType: "xml", 
    success: function(xml) { 
    this.data=xml; 
    } //close success 
    });//close AJAX 
}, 

UseXML: function() { 
    alert(this.data) 
} 
}; 

(script My uygulaması)


Ancak, bir sorunla karşılaştık. Ben bu kod bit kullanarak Burada gösterilen işlevleri çalıştırdığınızda:

var data = new XML_Data(); 
data.GetXML(); 
data.UseXML(); 

ben "boş" şeklinde bir uyarı olsun. Ben bir düzine kez kod boyunca oldum, ama bu benim ilk kez Javascript ile çalıştığı gibi, kesinlikle özledim bir şey var. Bunu işaret edebilir misin?

Teşekkürler, Elliot Bonneville. Sadece notun

+0

http://api.jquery.com/jQuery.ajax/ hemen Ajax verilerini kullanmak istiyor musunuz görüyor musunuz? Ajax ile ne sıklıkla yeni veri alırsınız? –

+0

Sadece bir kez, aramanın başında. –

cevap

2

jQuery içinde

var data = new XML_Data(); 
data.GetXML(); //This will run the ajax request 
data.UseXML(); //This will most likely run before the ajax request is finished. 

Yayıncılık olaylar problably çalışacak, ama bu kodu test sığınak.

function XML_Data() { 
    this.data = null; 
} 

XML_Data.prototype = { 
GetXML: function() { 
    $.ajax({ 
    type: "GET", 
     url: "questions.xml", 
    dataType: "html", 
    success: function(xml) { 
    this.data=xml; 
    $(window).trigger("myAjaxEvent"); 
    } //close success 
    });//close AJAX 
}, 

UseXML: function() { 
    alert(this.data) 
} 
}; 


$(document).ready(function() { 
    var data = new XML_Data(); 
    $(window).bind("myAjaxEvent", function() { 
     data.UseXML(); 
    }); 

    data.GetXML(); 

}); 
+0

Öyle mi? Bunu nasıl düzeltirim? –

+0

@Elliot ... jquery –

+0

Ah kullanarak olayları yayınlamayı deneyebilirsiniz, evet, işe yarayabilir. Teşekkürler. –

0

şimdi engellenmeyen asenkron API kullanarak (sırayla) eşzamanlı çalıştırmak için çalışıyor olması kodu. UseXML çağrısı, GetXML çağrısı gerçekte AJAX işini bitirmeden önce olur, çünkü zaman uyumsuzdur.

Bunu, eşzamansız bir kalıpta (bu, whileXXX'in doğrudan AJAX isteğinin başarısı olarak adlandırıldığı) veya eşzamanlı bir kalıpta ("async: false" iletisinin AJAX çağrısına geçirildiği) yazabilirsiniz. Senkronizasyon, JavaScript geliştirmede çok daha yaygındır, çünkü çok daha güçlüdür ve eşzamanlı istekler, betik yürütmeyi engelleyerek tarayıcıdaki kullanıcı arayüzünü engeller, ancak küçük işler için eşzamanlılık yapmak daha kolaydır.

İlgili konular