Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не передает значение массива внутрь $.ajax (https://javascript.ru/forum/jquery/49025-ne-peredaet-znachenie-massiva-vnutr-%24-ajax.html)

kapustnik 26.07.2014 12:33

Не передает значение массива внутрь $.ajax
 
Есть такой код:

function exist()
{
    var arr = ["1", "2", "3"];
	for(var i=0; i<arr.length; i++) {
       // здесь значение arr[i] еще передается
	$.ajax({
	url: "/admin/sys/db/" + arr[i] + "-log.txt",
	dataType:"text",
	cache: false,
	success: function(){ 
                // а здесь уже нет, arr[i] - undefined
		$('#skeleton-' + arr[i] + '').hide();  $('#frame-' + arr[i] + '').show();
	  },
	error: function(){ 
	//alert("/admin/sys/db/" + arr[i] + "-log.txt");
		$('#skeleton-' + arr[i] + '').show(); $('#frame-' + arr[i] + '').hide(); 
	  }
	});
	}
}


Внимание ВОПРОС (уважаемые знатоки) , почему внутрь ajax не передается значение массива arr[i] (определяется как undefined)

MallSerg 26.07.2014 17:42

Arr переменная функции exist и она не видна для функции success

kapustnik 26.07.2014 18:52

Логично. как сделать что бы видела? =

MallSerg 26.07.2014 19:23

У тебя цикл for в котором отправляются ajax запросы тут нет ни капли логики
Для того что бы видела нужно что бы arr была в зоне видимости.
А для этого нужно читать и изучать зоны видимости в javascript

tsigel 28.07.2014 11:30

kapustnik,
Или так:

function exist(){
	["1", "2", "3"].forEach(function(elem, index){
			$.ajax({
				url: "/admin/sys/db/" + elem + "-log.txt",
				dataType: "text",
				cache: false,
				success: function(){ 
					$('#skeleton-' + elem + '').hide();  $('#frame-' + elem + '').show();
				},
				error: function(){ 
					$('#skeleton-' + elem + '').show(); $('#frame-' + elem + '').hide(); 
				}
			});
		});
	}
}


Но вообще лучше чем в цикле дергать аякс сделать 1 запрос, который бы давал сразу всю информацию.


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