【问题标题】:Using JQuery to get JSON from Flask is returning null sometimes使用 JQuery 从 Flask 获取 JSON 有时会返回 null
【发布时间】:2016-08-12 14:38:04
【问题描述】:

所以我在 oracle Linux Server 6.6 版上进行开发,最近我的 Web 服务器切换到了 Apache 2.4。我正在开发一个 Flask Web 服务,所以我使用 Flask 的本地 WSGI 服务器来进行所有调试。

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

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

【问题讨论】:

  • 请将您的修复作为您问题的答案发布并接受您自己的答案,这样人们就知道该问题已经得到解答

标签: javascript jquery python apache flask


【解决方案1】:

所以我在挖了一周之后解决了这个问题。看起来我的请求在返回网页之前被取消了。所以我所做的是在我的 JavaScript 函数中添加一个 e.preventDefault()。

所以在我的html中我将其更改为

&lt;form onsubmit="restoreDB(event)"&gt;

在我的 JavaScript 中我添加了这个

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

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

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多