RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 791092
Accepted
Marionette
Marionette
Asked:2020-02-27 22:14:51 +0000 UTC2020-02-27 22:14:51 +0000 UTC 2020-02-27 22:14:51 +0000 UTC

在 PHP 中使用 AJAX 传递文件和字符串

  • 772

JavaScript

$(document).ready(function () {
    'use strict';
    $('#u_button').click(function () {
        var file_data = $('#u_jfile').prop('files')[0];
        var form_data = new FormData();
        form_data.append('file', file_data);
        $.ajax({
            url: "http://example.ru/script.php",
            dataType: 'json',
            cache: false,
            contentType: false,
            processData: false,
            data: {
                class: $('#u_class').val(),
                subject: $('#subject').val()
            }, form_data,
            type: 'post',
            success: function(data) {
                console.log(data.message);
            }
        });
    });
});

PHP

<?php
if ( ( !empty( $_FILES[ 'file' ] ) ) && ( $_FILES[ 'file' ][ 'error' ] == 0 ) ) {
    $filename = basename( $_FILES[ 'file' ][ 'name' ] );
    $ext = substr( $filename, strrpos( $filename, '.' ) + 1 );
    if ( ( $ext == "txt" ) && ( $_FILES[ "uploaded_file" ][ "size" ] < 350000000 ) ) {
        $newname = "../one/two/" . $_POST[ 'class' ] . "/" . $_POST[ 'subject' ] . ".txt";
        if ( ( move_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ], $newname ) ) ) {
            $date = date( 'd.m.Y_H:i:s' );
            $newfile = "../one/two/{$_POST['class']}/{$_POST['subject']}/{$date}.bak.txt";
            if ( !copy( $newname, $newfile ) ) {
                echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки" ) );
                die();
            } else {
                echo json_encode( array( "status" => "TRUE", "message" => "Загружено" ) );
                die();
            }
        } else {
            echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки" ) );
            die();
        }
    } else {
        echo json_encode( array( "status" => "FALSE", "message" => "cerr: ext or size" ) );
        die();
    }
} else {
    echo json_encode( array( "status" => "FALSE", "message" => "cerr: i not found file" ) );
    die();
}
?>

HTML

<label class="file_upload" id="u_file">
    <span>Выбрать файл</span>
    <input type="file" id="u_jfile" name="n_jfile" accept=".txt">
</label>

我面临一个错误:

cerr:我没有找到文件。

php
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    Alex
    2020-02-27T23:39:30Z2020-02-27T23:39:30Z

    您的问题是错误地将数据发送到数据。首先,您正确地形成form_data来提交文件,就好像一个普通的表单被提交,并且编码设置为multipart/form-data。对于正确的,content-type您设置了processData: false,但由于某种原因,您在 data 中放入了另一个对象,之后在data中获得了“粥” ,而不是发送到服务器。

    这将是正确的:

    $('#u_button').click(function () {
        var file_data = $('#u_jfile').prop('files')[0];
        var form_data = new FormData;
        form_data.append('file', file_data);
        form_data.append('class', $('#u_class').val());
        form_data.append('subject', $('#subject').val());
        $.ajax({
            url: "http://example.ru/script.php",
            dataType: 'json',
            data: form_data,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function (data) {
                console.log(data.message);
            }
        });
    });
    
    • 1
  2. Владимир
    2020-02-27T23:48:02Z2020-02-27T23:48:02Z
    var data = new FormData();
    data.append("email", "Email пользователя");
    data.append("message", "Какое-то сообщение");
    
    // прикрепляем файлы
    $.each($("#files")[0].files, function(i, file) {
        data.append("file[]", file);
    });
    
    // строим AJAX
    $.ajax({
        url: window.location.href,
        type: "POST",
        data: data,
        processData: false,
        contentType: false,
        success: function(data){
            console.log(data);
        },
        error: function( jqXHR, textStatus, errorThrown ){
            console.log('ОШИБКА: ' + textStatus );
        }
    });
    
    • 1
  3. Mykola Veryha
    2020-02-27T23:28:43Z2020-02-27T23:28:43Z

    查找与您的版本的差异并找出错误。此选项可以正常工作。

    这是第一个文件index.html:

    <!DOCTYPE html>
    <html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <title>
    
        </title>
    </head>
    <body>
    
    <label class="file_upload" id="u_file">
        <span>Выбрать файл</span>
        <input type="file" id="u_jfile" name="n_jfile" accept=".txt">\
        <button type="submit" id="u_button">submit</button>
    </label>
    <script type="text/javascript">
    
        $(document).ready(function () {
            'use strict';
            $('#u_button').click(function () {
                var file_data = $('#u_jfile').prop('files')[0];
                var form_data = new FormData;
                form_data.append('file', file_data);
                $.ajax({
                    url: "script.php",
                    data: form_data,
                    dataType: 'json',
                    processData: false,
                    contentType: false,
                    type: 'POST',
                    success: function (data) {
                        console.log(data.message);
                    }
                });
            });
        });
    </script>
    </body>
    </html> 
    

    第二个文件script.php:

    <?php
    if ( !empty($_FILES['file'])  && $_FILES[ 'file' ]['error'] == 0 ) {
        $filename = basename( $_FILES[ 'file' ][ 'name' ] );
        $ext = substr( $filename, strrpos( $filename, '.' ) + 1 );
        if ( ( $ext == "txt" ) && ( $_FILES[ "uploaded_file" ][ "size" ] < 350000000 ) ) {
            $newname = "test.txt";
            if ( ( move_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ], $newname ) ) ) {
                $newfile = "test1.txt";
                if ( !copy( $newname, $newfile ) ) {
                    echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки1" ) );
                    die();
                } else {
                    echo json_encode( array( "status" => "TRUE", "message" => "Загружено2" ) );
                    die();
                }
            } else {
                echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки3" ) );
                die();
            }
        } else {
            echo json_encode( array( "status" => "FALSE", "message" => "cerr: ext or size" ) );
            die();
        }
    } else {
        echo json_encode( array( "status" => "FALSE", "message" => "cerr:qwedf i not found file" ) );
        die();
    }
    ?>
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5