2017-04-04 361 views
0

我想要一個簡單的打印運行語句,以確保回調工作正常。取回調反應

var CsvUpload = React.createClass({ 
    uploadfile: function() { 
    console.log('trying') 
    var file = this.refs.file.files[0]; 
    var formData = new FormData() 
    formData.append('files', file) 

    fetch('http://127.0.0.1:5000/add_csv_to_db', { 
     method :'POST', 
     body : formData 
    }) 
    .then(() => {console.log('this worked')}) 
    .catch((err) => {console.log(err)}) 
    }, 

    render: function() { 
    return (
     <div> 
     <h4 className='sub-header'>CSV Upload</h4> 
     <form onSubmit = {this.uploadfile} encType="multipart/form-data"> 
      <input type="file" name="file" ref="file"/> 
      <button type="submit" className="btn btn-primary">Submit</button> 
     </form> 
     </div> 
    ) 
    } 
}) 

在服務器上:

@app.route('/add_csv_to_db', methods=['GET','POST']) 
def add_rows(): 
    file = request.files['files'] 
    x = io.StringIO(file.read().decode('UTF8'), newline=None) 
    csv_input = csv.reader(x) 
    for row in csv_input: 
     if row[0] == 'Email': 
      pass 
     else: 
      print(row) 
      tasks.add_User(row) 
    print('completed') 
    return json.dumps('success!') 

我看到 「完成」,在服務器打印出來。

在我看到"trying"控制檯,但它不打印"This worked"

我在做什麼錯?

+0

你嘗試投入.catch()上的承諾,以查看是否得到踢回錯誤?如果出現錯誤,則不會調用.then() – JiuJitsuCoder

+0

更新了問題並添加了.catch()我做對了嗎?沒有任何東西正在被打印:/ –

+0

是的,看起來不錯。我認爲它在服務器端。你的反應代碼對我來說看起來很好。嘗試使用Postman(或任何API測試工具)實現該方法,並查看返回的內容。 – JiuJitsuCoder

回答

0

您是否嘗試添加提交事件作爲您的uploadFile函數的參數,然後調用preventDefault()?您的應用可能會提交刷新,這就是爲什麼你永遠不會看到「這工作」打印出來。 這就是我的意思是:

var CsvUpload = React.createClass({ 
    uploadfile: function(e) { 
    e.preventDefault(); 
    console.log('trying') 
    ... 
+0

啊,那工作。我將不得不查找preventDefault():-) –