使用JQuery从Flask获取JSON有时会返回null

2024-04-19 14:52:40 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在开发oraclelinuxserverrelease6.6,最近我将web服务器切换到apache2.4。我正在开发一个Flask web服务,所以我使用Flask的本地WSGI服务器来进行所有调试。你知道吗

在应用程序中,我有一个表单,当您单击submit按钮时,它会对我的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();

现在网页没有重新加载,它有足够的时间等待响应。可能不是最好的解决办法,但我只是很高兴我修复了它。如果有人推荐更好的,那就太好了


Tags: 数据bridflaskdataifsnapshotrestore
1条回答
网友
1楼 · 发布于 2024-04-19 14:52:40

所以我挖了一个星期就解决了这个问题。看起来我的请求在返回网页之前被取消了。所以我在JavaScript函数中做了一个e.preventDefault()。他说

所以在我的html里我把它改成

<form onsubmit="restoreDB(event)">

我在JavaScript中添加了

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

现在网页没有重新加载,它有足够的时间等待响应。可能不是最好的解决办法,但我只是很高兴我修复了它。如果有人推荐更好的,那就太好了

相关问题 更多 >