Javascript PHP-从jQuery(AJAX)解析FormData时,多部分/表单数据变量返回NULL

Javascript PHP-从jQuery(AJAX)解析FormData时,多部分/表单数据变量返回NULL,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,场景 foreach($_POST as $key=>$value) { echo "$key=$value"; } <script> // wait for the DOM to be loaded $(document).ready(function(e) { e.preventDefault(); // bind 'myForm' and provide a simple cal

场景

foreach($_POST as $key=>$value)
{
  echo "$key=$value";
}
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
我从Js创建了一个动态FormData对象,然后用$.ajax()将数据发布到PHP

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
问题

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
我无法访问PHP中的变量

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
变量转储($_POST['name']);//这将返回NULL

NULL
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
但是!这显示了数组(),因此数据就在那里

foreach($_POST as $key=>$value)
{
  var_dump($key);
}
?>
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
var_dump($_POST);//这显示了完整的数组()

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
编辑:这也适用

foreach($_POST as $key=>$value)
{
  echo "$key=$value";
}
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
日志:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
更新

foreach($_POST as $key=>$value)
{
  var_dump($key);
}
?>
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
日志$key:

string(78) "------WebKitFormBoundaryK2sJT1BCmNt5jVVW
Content-Disposition:_form-data;_name"
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
//

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
记录$value

string(161) ""author"

test
------WebKitFormBoundaryosBAfp5AzD7g7fly
Content-Disposition: form-data; name="name"

jon snow
------WebKitFormBoundaryosBAfp5AzD7g7fly--
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
Js方法

Rimodromo.prototype.collectData = function(audio, sound, author) {
    var newPoemStore = rimodromo.newPoem;

    formData = new FormData();

    // formData.append("rime", newPoemStore);
    // formData.append("audio", new Blob([recorder.blob], {type:"application/octet-stream"}));
    // formData.append("sound", rimodromo.selectedSound);
    formData.append("author", "test");
    formData.append("name", "jon snow");


    // var myData = {
    //     rime:newPoemStore, 
    //     audio:recorder.blob,
    //     sound:rimodromo.selectedSound, 
    //     author:author || 'anónimo',
    //     name:name || 'nombre de rima'
    // }
    // return myData;
    return formData;
};



Rimodromo.prototype.submitRimodromo = function() {
    var myData = rimodromo.collectData();
    for (var pair of myData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }
      $.ajax({
        url : "insert.php",
        type: "POST",
        data: myData,
        cache: false,
        contenType: false,
        processData: false,
        success: function(data,status,xhr) {
            console.log(data);
            console.log(status);
        }

      }); 


};
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...

有什么线索吗?提前感谢=)

我以前也试过,但有时有效,有时无效。这是由于我们必须为ajax发送的数据提供配置,以使文件上传工作正常

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
我最近发现了一种方法,我将在下周的一个项目中尝试

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
此方法基于插件,可在以下链接中找到:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
据我所知,它在不支持HTML5的浏览器上仍然不起作用,但这与ajax上传没有什么不同

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
有关更多信息,请使用此链接:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
前端:

 <form id="myForm" action="upload.php" method="post" enctype="multipart/form-data"> 
        <input type="file" name="fileToUpload" id="fileToUpload"> 
        <input type="submit" value="Submit Comment" /> 
    </form>
 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...

//等待加载DOM
$(文件).ready(函数(e){
e、 预防默认值();
//绑定“myForm”并提供一个简单的回调函数
$('#myForm').ajaxForm(函数(){
url:'myscript.php',//或其他任何内容
成功:功能(响应){
警报(“服务器说:“+响应”);
} 
}); 
}); 
...
服务器端:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
    <?php
      ... //your code for testing the file exist, type and size 
       // if everything is ok, try to upload file
           if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
            } else {
                     echo  "Sorry, there was an error uploading your file.";
             }
?>


我希望有帮助

最后,错误是打字错误:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
contenType: false,
必须是:

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
contentType: false,
这就修正了错误

 <script> 
        // wait for the DOM to be loaded 
        $(document).ready(function(e) { 
            e.preventDefault();
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                url : 'myscript.php', // or whatever
                success : function (response) {
                   alert("The server says: " + response);
                } 
            }); 
        }); 
    </script> 
</head> 
...
¯\_(ツ)_/¯

问题出在钥匙上?您需要在$\u POST中传递total键才能获得像$\u POST[“----WebKitFormBoundarybLgHYUQw1augDdyF Content Disposition:_form-data;_name”]这样的名称。您好,请查看编辑,您可以发布一些示例来实现吗?打印键和值并显示输出Hanks Exprator,请查看我问题中的更新,看起来引号不知怎么打破了结构!谢谢,但是我的标记中没有表单,我使用FormData()创建它。我需要从php获取变量,然后将它们发布到db