2016-08-12 36 views
1

因此,我正在開發Oracle Linux Server 6.6版,並且最近我切換到了Apache 2.4以供我的Web服務器使用。我正在開發一個Flask Web服務,所以我使用Flask的本地WSGI服務器來執行我所有的調試。使用JQuery從Flask獲取JSON有時會返回null

在應用程序中,我有一個表單,當您單擊提交按鈕時,它會對我的Flask後端執行JQuery $ .getJSON()調用。然後在後端,我返回JSON數據並提醒用戶數據。問題是,大部分時間它返回null並且不會返回我的數據。其他時候它返回我的數據,一切都很好。這在我使用本地WSGI服務器時非常有效。當這個錯誤發生時,我曾經遷移到Apache,所以我相信問題來自Apache。

另外我打印出我的json數據之前返回,所以我知道肯定它沒有返回空數據,但我仍然得到這個錯誤。

我的HTML/JavaScript代碼

<div id="restore_submit" class="restore_submit" style="display:none;"> 
<form onsubmit="restoreDB()"> 
    Type the database ID and Snapshot ID of the database you want to restore 
    <br><br> 
    RDS ID:<br> 
    <input type="text" id="DbName2" name="DbName"> 
    <br> 
    Snapshot ID:<br> 
    <input type="text" id="snapshot_id" name="snapshot_id"> 
    <br><br> 
    <input type="submit" value="Restore"> 
</form> 
</div> 

function restoreDB() { 
    var DbName = document.getElementById('DbName2').value; 
    var snapshot_ID = document.getElementById('snapshot_id').value; 
    var check = confirm('Are you sure you want to restore ' + DbName); 
    if(check){ 
    $.getJSON('/restore_rds', { 
    Dbname: DbName, 
    snapshot_id: snapshot_ID 
    }, function(data) { 
     if(data){ 
      if(data && data.error){ 
       alert(DbName + " is being restored using this snapshot_id " + snapshot_ID); 
      } 
      else{ 
       alert(data.error); 
      } 
     } 
     else{ 
      alert("returned null"); 
      alert(data); 
     } 
    }); 
    } 
} 

我的Python代碼

#This is for the restore script 
@app.route('/restore_rds') 
#@login_required 

def restore_rds(): 
    DbName = request.args.get('Dbname') 
    snapshot_id = request.args.get('snapshot_id') 
    error = rds_action.restore_db(DbName, snapshot_id, rds) 
    if error: 
     error = str(error) 
    else: 
     error = 'empty' 
    print error 
    print jsonify(error = error) 
    return jsonify(error = error) 

編輯:

所以我固定的問題,就像挖了一個星期後。看起來我的請求在返回到網頁之前被取消。所以我在JavaScript函數中做了一個e.preventDefault()。

所以在我的HTML我將其更改爲

<form onsubmit="restoreDB(event)"> 

和我的JavaScript我加入這個

function restoreDB(e) { 
e.preventDefault(); 

現在網頁不刷新,它有足夠的時間來等待響應。可能不是最好的解決方法,但我很高興我修好了。如果有人推薦什麼更好,那將是很好的

+0

請張貼您的修復作爲您的問題的答案,並接受你自己的答案,這樣人們知道這個問題已經回答 –

回答

0

所以我解決了這個問題後像一個星期的挖掘。看起來我的請求在返回到網頁之前被取消。所以我在JavaScript函數中做了一個e.preventDefault()。

所以在我的HTML我將其更改爲

<form onsubmit="restoreDB(event)">

和我的JavaScript我加入這個

function restoreDB(e) { e.preventDefault();

現在網頁不刷新,它有足夠的時間來等待迴應。可能不是最好的解決方法,但我很高興我修好了。如果有人推薦任何更好的,那將是很好的