Javascript 当通过jQueryAjax发布表单数据时,如何从php检索回显数据?

Javascript 当通过jQueryAjax发布表单数据时,如何从php检索回显数据?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我想通过ajax将文件从文件输入表单传递到php脚本,并处理我的php脚本所回显的消息。 这是我的html表单: 和我的(简化)php脚本: 我想实现的是,如果文件上载成功或文件太大/扩展名错误,用户在不重新加载页面的情况下会收到一条消息。上载更改类型至按钮 因为类型是submit,并且是表单,所以它执行的是按钮类型submit的默认功能,而不是ajax类型 您可以将js代码更改为: $('#submit').click(function(evt) { evt.preventDefaul

我想通过ajax将文件从文件输入表单传递到php脚本,并处理我的php脚本所回显的消息。
这是我的html表单:

和我的(简化)php脚本:


我想实现的是,如果文件上载成功或文件太大/扩展名错误,用户在不重新加载页面的情况下会收到一条消息。

上载
更改
类型
至按钮

  • 因为类型是submit,并且是表单,所以它执行的是按钮类型submit的默认功能,而不是ajax类型

  • 您可以将js代码更改为:

    $('#submit').click(function(evt) {
    evt.preventDefault();
    ...
    

    或者您可以将输入的类型更改为按钮而不是提交。如果您想实现这一点,您可以在现代浏览器的客户端上尝试。这对我来说很好。 在W3c文件中,对象从Blob继承属性“size”。

    在chrome上一次更新中测试

    <!DOCTYPE html>
    <html>
    <head>
        <title>InputFileTest</title>
    
        <!--<script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
        <script type="text/javascript" src="inputFile.js"></script>!-->
    
        <script type="text/javascript">
    
            function validateSize(pFile){
    
                if (pFile.files[0].size > 9999999999999) {
                    alert("Your file is not valid, it exceed our limit!")
                    return false
                } 
    
                return true
            }
    
            function validateExtension(pFile){
                var fileName = pFile.files[0].name;
                var extension = "";
    
                for (var i = fileName.length - 1; i >= 0; i--) {
    
                    if (fileName[i] == ".") {
                        break
                    } else {
                        extension = fileName[i] + extension;
                    }
                }
    
                if (extension == "bmp") {
                    alert("Extension not permited!")
                    return false;
                }
    
                return true;
            }
    
            function validatingFile(){
                var file = document.getElementsByClassName("file")[0];
                if (file.files.length > 0) {
                    valid = validateSize(file);
                    valid = validateExtension(file);
    
                    if (valid) {
    
                        alert("Upload it!");
    
                    }
                } else {
                    alert("Select a valid file!");
                }
            }
    
        </script>
    </head>
    
    <body>
    
        <input type="file" name="file" class="file">
        <button onclick="validatingFile()">Sumit</button>
    
    </body>
    </html>
    
    
    输入文件测试
    函数validateSize(pFile){
    如果(pFile.files[0]。大小>999999999){
    警报(“您的文件无效,超出了我们的限制!”)
    返回错误
    } 
    返回真值
    }
    函数validateExtension(pFile){
    var fileName=pFile.files[0]。名称;
    var扩展=”;
    对于(var i=fileName.length-1;i>=0;i--){
    如果(文件名[i]==”){
    打破
    }否则{
    扩展名=文件名[i]+扩展名;
    }
    }
    如果(扩展名=“bmp”){
    警报(“不允许扩展!”)
    返回false;
    }
    返回true;
    }
    函数validatingFile(){
    var file=document.getElementsByClassName(“文件”)[0];
    如果(file.files.length>0){
    valid=validateSize(文件);
    valid=validateExtension(文件);
    如果(有效){
    警报(“上传它!”);
    }
    }否则{
    警报(“选择有效文件!”);
    }
    }
    苏米特
    
    上传
    将类型更改为
    按钮
    尝试
    控制台.log()
    而不是
    警报()
    ,然后查看开发人员工具中的控制台,查看
    数据的结构。请注意,上传文件之前最好先检查文件大小,否则,您必须等待整个文件上载到服务器,然后才能被告知该文件无效。请参阅,了解如何更改按钮类型,因为您的原始代码正常提交表单,而忽略了AJAX请求。您还可以通过将事件挂接到表单的
    submit()
    事件并使用
    e.preventDefault()来修复此问题
    @0x1234因为类型是submit,并且它是在表单中,所以它执行的是按钮类型submit的默认功能,而不是ajax类型。请注意:D。顺便问一下,使用此方法或e.preventDefault()方法@Rory McCrossan也建议了哪些优点或缺点?@0x1234 happy它为您工作了mate happy编码:)
    $('#submit').click(function(evt) {
    evt.preventDefault();
    ...
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>InputFileTest</title>
    
        <!--<script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
        <script type="text/javascript" src="inputFile.js"></script>!-->
    
        <script type="text/javascript">
    
            function validateSize(pFile){
    
                if (pFile.files[0].size > 9999999999999) {
                    alert("Your file is not valid, it exceed our limit!")
                    return false
                } 
    
                return true
            }
    
            function validateExtension(pFile){
                var fileName = pFile.files[0].name;
                var extension = "";
    
                for (var i = fileName.length - 1; i >= 0; i--) {
    
                    if (fileName[i] == ".") {
                        break
                    } else {
                        extension = fileName[i] + extension;
                    }
                }
    
                if (extension == "bmp") {
                    alert("Extension not permited!")
                    return false;
                }
    
                return true;
            }
    
            function validatingFile(){
                var file = document.getElementsByClassName("file")[0];
                if (file.files.length > 0) {
                    valid = validateSize(file);
                    valid = validateExtension(file);
    
                    if (valid) {
    
                        alert("Upload it!");
    
                    }
                } else {
                    alert("Select a valid file!");
                }
            }
    
        </script>
    </head>
    
    <body>
    
        <input type="file" name="file" class="file">
        <button onclick="validatingFile()">Sumit</button>
    
    </body>
    </html>