@Mihail_Mel

Почему вылезает ошибка «VM3200:128 Uncaught TypeError: Cannot read property 'done' of undefined»?

совсем запутался в изучении... пишу проверку вводимого названия на существование..

есть отдельная функция
function provnazvzn(name, type) {
	alert("Вход в функцию проверки наименования узла");
	alert("передаваемые данные - "+name+","+type);
	$.ajax({  
			type: "POST",
                        url: "ob_oper_provnazvan.php",  
			dataType:"text",
			data:{"type": type, "name": name },
                        cache: false,  
                        success:function(resu){
				alert("Результат"+resu);
				return resu;
            },
            error:function (xhr, ajaxOptions, thrownError){
               	alert(thrownError); 
				alert("Ошибка работы скрипта проверки названия узла");
            }
		});
}


функция возвращает или 1 или 0 соответственно...
и есть обработчик кнопки редактирования....

$(document).ready(function() {
	$("#button_edit_uz").click(function(event) {
		event.preventDefault(event);
                
                                        // проверка названия
					var name_uz = $("#name_uz").val();
					var type = "uzel";
					provnazvzn(name_uz, type).done(function(resu){
						if(resu=="1") { alert("Проверка при редактировании"); }
					});
       });
});


так вот то что после done(function(resu){..... никак не обрабатывается, а через консоль выдает сообщения

VM3200:128 Uncaught TypeError: Cannot read property 'done' of undefined
    at Object.eval (eval at globalEval (jquery.min.js:2), <anonymous>:128:31)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at z (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)


помогите пожалуйста!
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
Попробуйте перед аяксом поставить return, если повезет ), функция вернет промис, у которого есть метод done:
function provnazvzn(name, type) {
  // alert("Вход в функцию проверки наименования узла");
  // alert("передаваемые данные - "+name+","+type);
  return $.ajax({  
      type: "POST",
                        url: "ob_oper_provnazvan.php",  
      dataType:"text",
      data:{"type": type, "name": name },
                        cache: false,  
                        success:function(resu){
        alert("Результат"+resu);
        return resu;
            },
            error:function (xhr, ajaxOptions, thrownError){
               	alert(thrownError); 
        alert("Ошибка работы скрипта проверки названия узла");
            }
    });
}

---
Или сделать без done, как в комментарии выше:
if provnazvzn(name_uz, type) { // ... }
Но сделать запрос синхронным, добавив async: false :
$.ajax({  
      type: "POST",
      async: false, // синхронный запрос
      url: "ob_oper_provnazvan.php",  
      dataType:"text",
      data:{"type": type, "name": name },
                        cache: false,  
                        success:function(resu){
        alert("Результат"+resu);
        return resu;
            },
            error:function (xhr, ajaxOptions, thrownError){
               	alert(thrownError); 
        alert("Ошибка работы скрипта проверки названия узла");
            }
    });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
erniesto77
@erniesto77
oop, rb, py, php, js
if provnazvzn(name_uz, type) { // ... }
Ответ написан
Комментировать
@Mihail_Mel Автор вопроса
не работает. сообщения при жестко заданном возвращаемом значении (resu="1") я так и не могу получить....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы