san_jorich
@san_jorich
Творческий кодер

Баг при ajax загрузке файла. Что не так?

Здравствуйте!
Очень странное поведение связки скрипта ниже. Баг в том что "через раз" обработчик выдает что action пуст..
и оно то грузится, то ли нет..

jQuery(document).on('click', '#media-file-upload', function(event){ 
				
		event.stopPropagation(); event.preventDefault();  			
		if( typeof files == 'undefined' ) return( showResponse("error","Вы не выбрали файл") );			
		var data = new FormData(); var action = 'rotator_upload_media';
		data.append("action", action);
		$.each( files, function( key, value ){ data.append( key, value ); });			
		
		$.ajax({
			url         : ajaxurl,
			type        : 'POST',
			data        : data,
			cache       : false,
			dataType    : 'text',
			processData : false,
			contentType : false,
			success     : function( respond, status, jqXHR ){ 
				console.log(respond);
				//showResponse(status, "Загрузка успешно завершена");
				//$.each( JSON.parse(respond), function( key, value ){ console.log( key+": "+value ); });	
			},
			error: function( jqXHR, status, errorThrown ){	showResponse("error","ОШИБКА AJAX запроса: " + status +" " + jqXHR ); },
		});
	});


if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

		if( isset($_POST['action']) ){

			switch ($_POST['action']) {
				case 'rotator_update_options':	echo json_encode(rotator_update_options($_POST['options'])); break;	
				case 'rotator_upload_media':	json_encode(rotator_upload_media($_FILES)); break;	
			}

		}
		
		elseif( isset($_GET['action']) || !empty($_GET['action']) ){
				
			switch ($_GET['action']) {
				case 'rotator_get_options'	 :  echo json_encode(rotator_get_options()); break;
			}
		}

		else { die("Ошибка выполнения: AСTION пуст или неверен!"); }

	}


unction rotator_upload_media($files){ 
    
    $uploaddir = '../medialib';
        
    if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );

    foreach( $files as $file ){
        $file_name = cyrillic_translit( $file['name'] );

        if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){            
            $path = "$uploaddir/$file_name";
            $ThisFileInfo['path'] = $path;
            echo json_encode($ThisFileInfo);
        }
            
    }    
}
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
vitaly_74
@vitaly_74
может не всегда на сервере ставится HTTP_X_REQUESTED_WITH, покопайте в этом направлении, т.к. если этот if не срабатывает то ничего не выводится и поидее ajax ничего не получает.
либо же, сам ajax не отправляет форму. но если отправляет всегда, но иногда не получает ответ, то дело в php
Ответ написан
Ваш ответ на вопрос

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

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