Итак, я разрабатываю версию oracle Linux Server версии 6.6 и недавно перешел на Apache 2.4 для своего веб-сервера. Я разрабатываю веб-службу Flask, поэтому я использую локальный WSGI-сервер Flask для выполнения всей моей отладки.Использование JQuery для получения JSON из Flask иногда возвращает null
В приложении у меня есть форма, и когда вы нажимаете кнопку отправки, она вызывает вызов 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)
EDIT:
Так я установил вопрос после того, как неделю копать. Похоже, мои запросы были отменены, прежде чем вернуться на веб-страницу. Итак, что я сделал, это e.preventDefault() в моей функции JavaScript.
так в моем HTML я изменить его на
<form onsubmit="restoreDB(event)">
и в моей JavaScript я добавил этот
function restoreDB(e) {
e.preventDefault();
Теперь веб-страница не перезагружается, и у него достаточно времени, чтобы ждать ответа , Наверное, это не самое лучшее решение, но я просто счастлив, что исправил его. Если кто-нибудь рекомендует что-нибудь лучше, это будет замечательно
, пожалуйста, напишите свое решение как ответ на ваш вопрос и примите свой ответ таким образом, люди знают, что этот вопрос уже ответил –