Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не используется переменная (https://javascript.ru/forum/jquery/73090-ne-ispolzuetsya-peremennaya.html)

naplekov 20.03.2018 15:46

Не используется переменная
 
Не могу понять как использовать переменные
html, files_path после отработки функции
$('.upload_files').on( 'click', function( event ){
...}
пробую например вывести в консоль console.log($html) внутри
этой функции $(".add2cart").click(function () {...}

выдается ошибка "Uncaught ReferenceError: $html is not defined"

Ниже весь код:
$(window).ready(function () {
	(function($){

var files; // переменная. будет содержать данные файлов

// заполняем переменную данными файлов, при изменении значения file поля
$('input[type=file]').on('change', function(){
	files = this.files;
});


// обработка и отправка AJAX запроса при клике на кнопку upload_files
$('.upload_files').on( 'click', function( event ){

	event.stopPropagation(); // остановка всех текущих JS событий
	event.preventDefault();  // остановка дефолтного события для текущего элемента - клик для <a> тега

	// ничего не делаем если files пустой
	if( typeof files == 'undefined' ) return;

	// создадим данные файлов в подходящем для отправки формате
	var data = new FormData();
	$.each( files, function( key, value ){
		data.append( key, value );
	});

	// добавим переменную идентификатор запроса
	data.append( 'my_file_upload', 1 );

	// AJAX запрос
	$.ajax({
		url         : '/wp-content/themes/basic-pro/submit.php',
		type        : 'POST',
		data        : data,
		cache       : false,
		dataType    : 'json',
		// отключаем обработку передаваемых данных, пусть передаются как есть
		processData : false,
		// отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос
		contentType : false,
		// функция успешного ответа сервера
		success     : function( respond, status, jqXHR ){

			// ОК
			if( typeof respond.error === 'undefined' ){
				// файлы загружены, делаем что-нибудь

				// покажем пути к загруженным файлам в блок '.ajax-reply'
				
				var files_path = respond.files;
				var $html = '';
				$.each( files_path, function( key, val ){
					 $html += val +'<br>';
				} )

				$('.ajax-reply').html( $html );
			}
			// error
			else {
				console.log('ОШИБКА: ' + respond.error );
			}
		},
		// функция ошибки ответа сервера
		error: function( jqXHR, status, errorThrown ){
			console.log( 'ОШИБКА AJAX запроса: ' + status, jqXHR );
		}
	});
	$(".add2cart").click(function () {
		description = "";
		if ($("[data-id=" + $(this).data("id") + "]").hasClass("descriptionField")) {
			$(".descriptionField[data-id=" + $(this).data("id") + "]").removeClass("error");
			if ($(".descriptionField[data-id=" + $(this).data("id") + "]").val() < 8) {
				$(".descriptionField[data-id=" + $(this).data("id") + "]").addClass("error");
				return false;
			} else {
				description = $(".descriptionField[data-id=" + $(this).data("id") + "]").val();
				// description = description + " www ";
				console.log($html);
			}
		}
		$('#basket').removeClass('close-basket');
		$('button.add2cart[data-id=' + $(this).data("id") + ']').fadeOut();
		$('p.descriptionField-p[data-id=' + $(this).data("id") + ']').fadeOut();
		$('.descriptionField[data-id=' + $(this).data("id") + ']').fadeOut();
		$('.selectPrice[data-id=' + $(this).data("id") + ']').fadeOut();
		$('button.showFields[data-id=' + $(this).data("id") + ']').fadeIn();
		$('button.showFields[data-id=' + $(this).data("id") + ']').addClass('added');
		$('button.showFields[data-id=' + $(this).data("id") + ']').after('<i></i>');
		$.ajax({
			method: "post",
			url: "/ajax/common.php",
			data: ({
				action: "add2cart",
				name: $(this).data("name"),
				price: ($(".selectPrice[data-id=" + $(this).data("id") + "]").val() > 0 ? $(".selectPrice[data-id=" + $(this).data("id") + "]").val() : $(this).data("price")),
				descr: description
			}),
			success: function () {
				showcart();
				messageShowAddBasket("<p>Услуга добавлена<br><button onclick='showbasketlist(true);'>перейти в корзину</button></p>");
			}
		})
	});

});

	
})(jQuery);

});

laimas 20.03.2018 16:01

Цитата:

Сообщение от naplekov
пробую например вывести в консоль console.log($html) внутри

Это асинхронные события, это раз. Если певрое и было до наступления второго, то переменные должны быть глобальными, чтобы изменения в первом событии были доступны во втором, это два.

Dilettante_Pro 20.03.2018 16:15

naplekov,
Вообще-то $html у вас сохраняется в
$('.ajax-reply').html( $html );

- там и смотрите.

naplekov 20.03.2018 16:28

Цитата:

Сообщение от laimas (Сообщение 481068)
Это асинхронные события, это раз. Если певрое и было до наступления второго, то переменные должны быть глобальными, чтобы изменения в первом событии были доступны во втором, это два.

Спасибо! Помогло! Я уже не один день ковырялся

naplekov 20.03.2018 16:29

Цитата:

Сообщение от Dilettante_Pro (Сообщение 481069)
naplekov,
Вообще-то $html у вас сохраняется в
$('.ajax-reply').html( $html );

- там и смотрите.

Пробовал. ничего не находит((

Dilettante_Pro 20.03.2018 16:47

naplekov,
Цитата:

Сообщение от naplekov
Пробовал. ничего не находит((

Не может быть!
$html у вас получает значение в ответе от сервера и сразу же записывается в $('.ajax-reply').
Больше у вас содержимое $('.ajax-reply') нигде не меняется. Если есть одно - должно быть и другое.


Часовой пояс GMT +3, время: 19:07.