Ajax调用问题

时间:2018-03-18 11:16:45

标签: javascript ruby-on-rails ajax reactjs react-redux

我通过ajax调用发送图像属性文件。但后api可能会不断打破这个。我想将文件推送到formData&中的image属性数组中。有成功的api电话。

我的Api表单数据配置如下图所示: enter image description here

当我在控制台I上检查formData图像属性数组时,我会得到图像属性[]:[对象文件] ,如下图所示: enter image description here &安培;我的api经常失败并显示以下错误: enter image description here 以下是我目前坚持使用的代码:

/ * NewPost.jsx * /

export const getNewPostDetails = (data) => {


console.log(data);
  var data_value = data;
  return function(dispatch) {
    var formData = new FormData();

    // add assoc key values, this will be posts values
    // setting form data

    console.log(data_value);

    //for image files
    if(data_value.images_attributes) {
      formData.append('images_attributes[]', $('input[type=file]')[0].files[0]);
    }


    //for video files
    formData.append('video_attributes[]', null);

    //for custom brands
    if(data_value.custom_brand) {
      formData.append('brand_ids[]', data_value.custom_brand);
    }

    //for products
    if(data_value.custom_product) {
      formData.append('product_ids[]', data_value.custom_product);
    }

    //For Price & Description
    formData.append('price', data_value.Price);
    formData.append('description', data_value.description);

    for (let pair of formData.entries()) {
      console.log(pair[0] + ': ' + pair[1]); 
    }

    $.ajax({
      type: "POST",
      url: `${mainurl}/api/v1/posts`,
      // headers: checkAuthHeaders(), // the main solution
      formData: formData,
      beforeSend: function(){
        $("#new_post_desc").prop('disabled', true);
        $("#autocomplete_brand").prop('disabled', true);
        $("#autocomplete_product").prop('disabled', true);
        $("#autocomplete_price").prop('disabled', true);
        dispatch(createPostProgress(true));
       },
      success: function(resp) {
        $('#new_post_desc').val("");
        $('#new_post_image').val("");
        $('#autocomplete_brand').val("");
        $('#autocomplete_product').val("");
        $('#autocomplete_price').val("");
        $("#brand_value_selected").val("");
        $("#product_value_selected").val("");
        $("#new_post_desc").prop('disabled', false);
        $("#autocomplete_brand").prop('disabled', false);
        $("#autocomplete_product").prop('disabled', false);
        $("#autocomplete_price").prop('disabled', false);

        dispatch(receiveNewPostDetails(resp));
        dispatch(resetNewPostFlag());
        dispatch(createPostProgress(false));
      },
      error: function(error) {
        dispatch(createPostProgress(false));
      },
      async: true,
      cache: false,
      contentType: false,
      processData: false,
      timeout: 60000
    });
  };
}

/ * Actions / index.js * /

<?php define('DB_HOST', 'localhost'); 
define('DB_NAME', 'phplogin'); 
define('DB_USER','adminuser'); 
define('DB_PASSWORD','adminuser'); 
$con=mysql_connect(DB_HOST,DB_USER, "")
//$mysql_select_db = 'phplogin'
//or die("Failed to connect to MySQL: " . mysql_error()); 
//$db=mysql_select_db(DB_NAME,$con) 
or die("Failed to connect to MySQL: " . mysql_error()); 
$ID = $_POST['user']; $Password = $_POST['pass']; 

 function SignIn() 
{ session_start();
 if(!empty($_POST['user'])) 
 { $query = mysql_query("SELECT * FROM phplogin where userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysql_error()); $row = mysql_fetch_array($query) or die(mysql_error()); if(!empty($row['userName']) AND !empty($row['pass'])) 
 { $_SESSION['userName'] = $row['pass']; echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; } else { echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; } } } if(isset($_POST['submit'])) { SignIn(); } ?>

1 个答案:

答案 0 :(得分:1)

[]在属性名称的末尾,它通常意味着该字段是一个数组,并且该字段的值不应该是数组。所以尝试使用:

formData.append('images_attributes[]', files[0]);
formData.append('images_attributes[]', files[1]);
formData.append('images_attributes[]', files[2]);
// etc..

而不是

formData.append('images_attributes[]', files);

同样的规则适用于其他领域。