Standart uzantı noktaları sağlayan bir JavaScript widget'ım var. Bunlardan biri beforecreate
işlevidir. Bir öğenin oluşturulmasını önlemek için false
döndürmelidir.
Bu fonksiyona jQuery kullanarak bir Ajax çağrısı ekledim:
beforecreate: function (node, targetNode, type, to) {
jQuery.get('http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
function (result) {
if (result.isOk == false)
alert(result.message);
});
}
Ancak widget'ımın öğeyi oluşturmasını önlemek istiyorum, bu yüzden geri aramada değil, ana işlevde false
döndürmeliyim. jQuery veya başka bir tarayıcı içi API kullanarak senkron AJAX isteği gerçekleştirmenin bir yolu var mı?
jQuery belgelerinden]1: senkronize bir Ajax isteği almak için asynchronous seçeneğini false olarak belirtirsiniz. Daha sonra geri aramanız, ana işleviniz ilerlemeden önce bazı verileri ayarlayabilir.
Kodunuz önerildiği gibi değiştirilirse şöyle görünür:
beforecreate: function (node, targetNode, type, to) {
jQuery.ajax({
url: 'http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
success: function (result) {
if (result.isOk == false) alert(result.message);
},
async: false
});
}
jQuery'nin Ajax kurulumunu senkronize moda geçirebilirsiniz.
jQuery.ajaxSetup({async:false});
Ve sonra Ajax çağrılarınızı jQuery.get( ... );
kullanarak gerçekleştirin.
Sonra sadece bir kez tekrar açmak
jQuery.ajaxSetup({async:true});
Sanırım @Adam tarafından önerilenle aynı şekilde çalışıyor, ancak jQuery.get()
veya jQuery.post()
işlevlerini daha ayrıntılı jQuery.ajax()
sözdizimine göre yeniden yapılandırmak isteyen biri için yararlı olabilir.
Mükemmel çözüm! Bunu uygulamaya çalıştığımda, başarı cümlesinde bir değer döndürdüğümde, tanımsız olarak geri döndüğünü fark ettim. Bir değişkende saklamak ve bu değişkeni döndürmek zorunda kaldım. Bu benim bulduğum yöntem:
function getWhatever() {
// strUrl is whatever URL you need to call
var strUrl = "", strReturn = "";
jQuery.ajax({
url: strUrl,
success: function(html) {
strReturn = html;
},
async:false
});
return strReturn;
}