От документация jQuery : Вы определяете асинхронный опция быть ложь для получения синхронного запроса Ajax. Тогда Ваш обратный вызов может установить некоторые данные, прежде чем Ваша родительская функция продолжится.
Вот то, на что Ваш код был бы похож, если изменено, как предложено:
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
});
}
Отличное решение! Когда я пытался реализовать это, я заметил, что если я возвращал значение в предложении успеха, оно возвращалось как undefined. Мне пришлось сохранить его в переменной и вернуть эту переменную. Я придумал следующий метод:
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;
}