2017-11-25 80 views
0

我有一个奇怪的问题,任何帮助,将不胜感激。反应:formData在PHP中为空?

其实代码可以写得更好我敢肯定,所以也许我只是在做一些根本上错误的地方,但即使是这样的话我想知道为什么这不起作用。

所以我必须在组件AddHouse这样输入字段的表单:

<form name="myForm" encType="multipart/form-data" onSubmit={this.uploadForm}> 
       <input type="text" name="city" placeholder={condition ? 'City' : this.props.placeholders.city} {...(condition ? {required:true} : {})}></input><br></br> 
       <input type="text" name="address" placeholder={condition ? 'Address' : this.props.placeholders.address} {...(condition ? {required:true} : {})}></input><br></br> 

这只是形式的一小部分。它有多个类似的字段,当我从主页面上传它时,它会工作,但我也想从我制作的模式发送这个表单,但是当我从模式发送到PHP文件上传到在数据库中,$ _POST数组只包含键。条件是给那些模式的房屋数据作为占位符,并使字段不是必需的,并且这两个条件都有效。

当表单被上传时,这个函数被调用AddHouse组件:

uploadForm(e){ 
    e.preventDefault(); 
    this.setState({loading: true, errorMsg: false, successMsg: false}); 
    var form = document.forms.namedItem("myForm"); 
    var formData = new FormData(form); 

    this.props.addHouse(formData, function(bool){ 
     if(bool){ 
      form.reset(); 
      this.setState({successMsg: true, errorMsg: false, loading: false, preview: null}); 
     } 
     else{ 
      this.setState({errorMsg: true, successMsg: false, loading: false}); 
     } 
    }.bind(this)); 
} 

addHouse在父组件:

addHouse(formData, fn){ 
    var dashboard = this; 
    var request = new XMLHttpRequest(); 

    var script = this.state.modal ? "php/edit_house.php" : "php/add_house.php"; 
    this.setState({loading: true}); 
    request.open("POST", script, true); 
    request.onreadystatechange = function(){ 
     if(request.readyState === 4){ 
      if(request.status === 200 && request.responseText == 1){ 
       dashboard.setState({loading: false}); 
       fn(true); 
      } 
      else{ 
       console.log(request.responseText); 
       dashboard.setState({loading: false}); 
       fn(false); 
      } 
     } 
    }; 
    request.send(formData); 

谢谢如果你花时间阅读这堵墙..

+0

我从标题中删除了已解决。您可以在答案区域发布自己的答案,也可以删除问题。被接受的答案会自动将其标记为已解决。 –

回答

0

好吧我解决了这个问题!我只用了一个不同的名称来指代的形式,让我改变了以下几行和它的作品:

var form = document.forms.namedItem("myForm"); 

var form = this.props.placeholders === undefined ? document.forms.namedItem("myForm") : document.forms.namedItem("myForm2"); 

并增加了一个条件渲染方法来改变形式名称取决于它呈现的位置:

form name={condition ? 'myForm' : 'myForm2'}