Ajax GET запрос к сервису Flask завершается неудачно и возвращает странный пустой объект, но тот же URL работает при вставке в адресную строку - PullRequest
0 голосов
/ 11 июня 2018

У меня есть запрос 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 был очень полезным и автоматически устанавливал префиксадрес до навигации там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...