Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   AJAX $_FILES (https://javascript.ru/forum/dom-window/66689-ajax-%24_files.html)

imedia 03.01.2017 00:20

AJAX $_FILES
 
ЗДРАВСТВУЙТЕ что удивительно
вот я передаю постом файл
function fileSelectFunc(e) {
        e.stopPropagation();
        e.preventDefault();
        var file = e.target.files || e.dataTransfer.files;
		
		$.ajax({
url: "/server/ajax_php_file.php", // Url to which the request is send
type: "POST",             // Type of request to be send, called as method
data: file[0], // Data sent to server, a set of key/value pairs (i.e. form fields and values)
contentType: false,       // The content type used when sending data to the server.
cache: false,             // To unable request pages to be cached
processData:false,        // To send DOMDocument or non processed data file it is set to false
success: function(data)   // A function to be called if request succeeds
{
if (file[0].type.match('image/*'))
ParseFile(file[0]);
else
e.target.className = '';
}
});

POST: http://imedia.in.ua/server/ajax_php_file.php
В консоли вижу POST [object ]
И постом идет графический файл но в Response
print_r($_POST);

В обработчике пытаюсь распечатать пост array (0)

laimas 03.01.2017 03:52

Документацию кто читать будет?
http://fi2.php.net/manual/ru/features.file-upload.php

imedia 03.01.2017 19:02

это все я читал но я в тупике, ведь я не формой передаю а в javascript коде у меня уже встречается файл поэтому я не могу проверить if isset $_FILES['userfile']['name'] а проверка на $_POST и на $_FILES дает array(0)

В то время как файл в посте есть как его принять?

laimas 03.01.2017 19:37

Цитата:

Сообщение от imedia
ведь я не формой передаю а в javascript коде

Какая хрен разница - РНР помещает данные по загруженным файлам в массив $_FILES, где в руководстве написано, что эти данные можно найти в $_POST?

Мало читать, нужно вникать в то, что пишется.

imedia 03.01.2017 20:18

Есть firebug в нем в ячейке POST показано что файл есть то есть он идет но PHP его не видит в массиве $_FILES, вы реально можете сказать как его в этом случае получить?

http://test.imedia.in.ua/main_contro...ages/portfolio

laimas 03.01.2017 20:28

Я вам еще раз повторяю, что файлы клиент может отправить только методом POST, у метода GET на это не хватит размера под него отведенного. А РНР возвращает информацию о загруженных по HTTP файлах ТОЛЬКО в массив $_FILES.

Если этот массив пуст, значит файл не получен сервером. Если читали руководство, там все написано - ошибки, как их получить и т.п. Проверяйте.

imedia 03.01.2017 20:44

Приведите пожалуйста пример, прошу вас, я там не могу найти как проверить почему сервер файл не получает

laimas 03.01.2017 20:59

Отправлять надо как следует, ну и конечно анализировать ошибки, а не гадать на кофейной гуще.

<?
if($_POST) {
    exit('POST '.print_r($_POST, 1).'FILES '.print_r($_FILES, 1));
}
?>
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script> 
$(function() {
    $('form').on('submit', function(e){
        e.preventDefault();
        $.ajax({
            url: this.action,
            type: 'POST',
            contentType: false,
            processData: false,
            data: new FormData(this),
            dataType: 'text',
            success: function(data){
                if(!!data){
                    alert(data);
                }
            }
        });
    });
});
</script>     
</head> 

<body>
    <form action="" method="post" enctype="multipart/form-data">
      <input type="text" name="file_name" value="name_file"/><br/>
      <input type="file" name="file_body"/><br/>
      <input type="submit" value="Отправить"/>
    </form>
</body> 
</html>

imedia 03.01.2017 21:47

Формы нет никакой просто файл уже в коде javascript
как переменная как я выше написал file[0]

laimas 03.01.2017 21:59

А если только поле, то, отправлять тоже надо по уму, к примеру:

var data = new FormData();
data.append(this.name, this.files[0]);
//....
data: data,


где this ссылка на поле.


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