Javascript AJAX上传文件和文本无效

Javascript AJAX上传文件和文本无效,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我使用这个ajax代码提交表单并上传多个输入文件。我想通过ajax发送所有表单数据。文本输入成功发送,但文件输入未通过ajax成功发布! 如何更改此代码 $("#add_order").click(function () { //*****get data input var formData = new FormData(); formData.append( 'action', 'add_order'); formData.append(

我使用这个ajax代码提交表单并上传多个输入文件。我想通过ajax发送所有表单数据。文本输入成功发送,但文件输入未通过ajax成功发布! 如何更改此代码

$("#add_order").click(function () {

    //*****get data input
    var formData = new FormData(); 
        formData.append( 'action', 'add_order');
        formData.append( 'customer_name', $('input[name=customer_name]').val());
        formData.append( 'date', $('input[name=date]').val());
        formData.append( 'order_status', $('input:radio[name=order_stautus]').val());
        formData.append( 'total_price', $('input[name=totalprice]').val());
        formData.append( 'quits', $('input[name=quits]').val());
        formData.append( 'debt', $('input[name=debt]').val());
        formData.append( 'desc', $('#desc').val());
        formData.append( 'desc2', $('#desc2').val());

    $.each($("input[type=file]"), function(i, obj) {
        $.each(obj.files,function(j,file){
            formData.append('photo['+i+']', file);
        });
    });
    $.ajax({
        url: "includes/ajax/ajax.php",
        data: formData,
        processData: false,
        contentType: 'multipart/form-data',
        type: 'POST',
        dataType:'json',
        success: function(response){
           //load json data from server and output message     
           if(response.type == 'error'){ //load json data from server and output message     
               output = '<div class="alert alert-danger">'+response.text+'</div>';
           }else{
               output = '<div class="alert alert-danger">'+response.text+'</div>';
           }
           $("#results").append(output).slideDown();
        } 
    });        
});
$(“#添加订单”)。单击(函数(){
//*****获取数据输入
var formData=new formData();
append('action','add_order');
append('customer\u name',$('input[name=customer\u name]').val();
append('date',$('input[name=date]').val());
append('order_status',$('input:radio[name=order_status]').val();
append('total_price',$('input[name=totalprice]').val());
append('quits',$('input[name=quits]').val());
append('debt',$('input[name=debt]').val());
append('desc',$('#desc').val());
append('desc2',$('#desc2').val());
$。每个($(“输入[type=file]”),函数(i,obj){
$.each(对象文件,函数(j,文件){
append('photo['+i+']',file);
});
});
$.ajax({
url:“includes/ajax/ajax.php”,
数据:formData,
processData:false,
contentType:“多部分/表单数据”,
键入:“POST”,
数据类型:'json',
成功:功能(响应){
//从服务器加载json数据并输出消息
if(response.type=='error'){//从服务器加载json数据并输出消息
输出=''+响应。文本+'';
}否则{
输出=''+响应。文本+'';
}
$(“#结果”).append(输出).slideDown();
} 
});        
});
获取表单数据的PHP代码:

if($_POST['action']=='add_order'){

    $customer_id = 1;
    $date = $_POST['date'];
    $status = $_POST['order_status'];
    $total_price = $_POST['total_price'];
    $quits = $_POST['quits'];
    $debt = $_POST['debt'];
    $desc = $_POST['desc'];
    $desc2 = $_POST['desc2'];

    for($i=0; $i<count($_FILES['photo']['name']); $i++) {
        //Get the temp file path
        $tmpFilePath = $_FILES['photo']['tmp_name'][$i];

        //Make sure we have a filepath
        if ($tmpFilePath != ""){
          //Setup our new file path
          $newFilePath = "../../uploads/orders/" . $_FILES['photo']['name'][$i];

          //Upload the file into the temp dir
          if(move_uploaded_file($tmpFilePath, $newFilePath)) {

            //Handle other code here

          }
        }
      }
if($\u POST['action']=='add\u order'){
$customer_id=1;
$date=$_POST['date'];
$status=$_POST['order_status'];
$total_price=$_POST['total_price'];
$quits=$_POST['quits'];
$debt=$_POST['debt'];
$desc=$_POST['desc'];
$desc2=$_POST['desc2'];
对于($i=0;$i根据,
contentType
必须设置为false才能上载ajax文件


或许可以尝试将所有文件命名为
photo[]
而不是
photo[n]
,让PHP服务器处理数组转换。请参阅。

您必须使用JSON.stringify:

$.ajax({
    type: 'post',
    data: {form_data: JSON.stringify(formData)},
    contentType: 'application/json',
    dataType: 'json'
});
您还需要指定“application/json”而不是“multipart/formdata”。 您可以使用以下工具检查json字符串的格式是否正确:

在PHP端,您必须对传入数据进行如下解码:

json_decode($_POST[form_data]);
请注意,请求中的数据类型指定希望从服务器接收的内容,contentType是要发送的内容类型

在PHP文件中,您必须根据json格式以json格式对响应进行编码:

echo json_encode($my_response);
编辑: 以下是关于在PHP端访问json对象的一些提示:

<?php

$my_json = json_decode($_POST["form_data"]);
$action = $my_json["action"];

/*
 DO STUFF
*/

$response = array('error' => "My error");
if(/* all is correct */)
    $response = array('response' => "My response", 'id' => 3);

echo json_encode($response);

?>


“我想获取所有表单数据以及输入文件和上载文件。但不是上载文件!”请澄清。这没有任何意义。@JoshBjelovuk问题已经纠正。我认为您在使用ajax发送对象之前没有对其进行字符串化。应该是这样的:
JSON.stringify(formData)
。您确定您的JSON语法正确吗?也许一些console.log会有所帮助。@MarcoMoschettini console.log图像添加到问题中。您确定使用AJAX发送文件工作正常吗?谢谢。我可以获得php示例代码吗?