У меня есть запрос AJAX через JQuery, который выглядит следующим образом:
$.ajax({
headers: {"Content-Type": "application/json"},
url: '127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1',
dataType: 'jsonp',
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response);
console.log(error);
}
});
И это служба, которую он пытается получить, написано в колбе:
from flask import Flask, jsonify, abort, request
app = Flask(__name__)
#Example query: 127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
@app.route('/runNetwork', methods=['GET'])
def run_network():
summary = request.args.get('schema')
change = request.args.get('consumer')
json = jsonify({"schema" : summary, "consumer" : change})
return json
if __name__ == "__main__":
app.run(debug=True)
КогдаЯ пытаюсь нажать на кнопку, которая выполняет запрос ajax, он не работает, и я получаю странный объект, который, по-видимому, не содержит информации:
{…}
abort: function abort()
always: function always()
catch: function catch()
done: function add()
fail: function add()
getAllResponseHeaders: function getAllResponseHeaders()
getResponseHeader: function getResponseHeader()
overrideMimeType: function overrideMimeType()
pipe: function pipe()
progress: function add()
promise: function promise()
readyState: 0
setRequestHeader: function setRequestHeader()
state: function state()
status: 0
statusCode: function statusCode()
statusText: "error"
then: function then()
__proto__: Object { … }
Я могу развернуть все эти параметры, но все они просто содержатlength
и атрибут name
, длина всегда равна 0 или 1, а имя - это просто имя элемента в возвращаемом объекте (т. Е. abort
имеет атрибут name
с именем abort
.
Что меня очень смущает, так это то, что, когда я копирую и вставляю тот же URL (127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
) в браузер, кажется, что все в порядке, я возвращаю JSON без проблем.
Я действительно не знаю, что еще делать в этот момент, в журнале колб нет никакой другой информации.
Что-то еще, что я только что заметил, кажется, что запрос даже не делает егона сервер, как Pycharm Console, с которого я запускаю сервер фляги, печатает это:
127.0.0.1 - - [11/Jun/2018 20:46:10] "GET /runNetwork?schema=moscow&consumer=BUILDING_1 HTTP/1.1" 200 -
Всякий раз, когда я вношу запрос в адресную строку, но он не появляется, когда я пытаюсь получить к нему доступ череззапрос ajax.
Я расстроен и отчаялся, поэтому я пытаюсь получить что-то - что угодно - чтобы вернуться с сервера.Я изменил запрос на тип POST, например:
from flask import Flask, jsonify, abort, request, Response
app = Flask(__name__)
#Example query: 127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
@app.route('/runNetwork', methods=['GET', 'POST'])
def run_network():
foo = request.form['foo']
json = jsonify({"schema": foo})
return json
if __name__ == "__main__":
app.debug = True
app.run(host='0.0.0.0', port=5005, threaded=True)
и
$.ajax({
url: "127.0.0.1:5005/runNetwork",
method: "POST",
data: { foo : "bar" },
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response)
console.log(error);
}
});
, и он ПОСТОЯННО возвращает ту же ошибку.
РЕШЕНИЕ НАЙДЕНО
Всё это время было у меня под носом.Адрес флеш-сервера должен начинаться с префикса http://
в запросе ajax:
$.ajax({
url: "http://127.0.0.1:5005/runNetwork",
method: "POST",
data: { foo : "bar" },
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response)
console.log(error);
}
});
Причина, по которой он был успешно вставлен в адресную строку, заключается в том, что firefox был очень полезным и автоматически устанавливал префиксадрес до навигации там.