Получение неопределенного в функции обратного вызова в междоменном посте ajax - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь отправить ajax-запрос в приложение фляги и получить ответ в функции обратного вызова.К сожалению, вместо json я получил неопределенное значение.

Буду благодарен за любую помощь!

Мой код на стороне сервера:

application = Flask(__name__)
CORS(application)

...

@application.route('/get_forecast', methods=['POST', 'GET'])
def get_forecast():
    if request.method == 'POST':
        print('in post')
        predictions = {} 
        predictions['data'] = calc_forecast(request.get_json()["data"])
        print(predictions)
        return jsonify(predictions)

Мой код на стороне клиента:

  $.ajax({
            type: "POST", 
            url: "http://localhost:5000/get_forecast",
            data: JSON.stringify(markers),
            dataType: 'json',
            crossDomain: true,
            contentType: "application/json",
            done: function(resp, status){
                console.log('done')
                console.log(resp)
                console.log(status)
                console.log('=====')
                }(),
            fail: function(xhr, ajaxOptions, thrownError){
                console.log('fail');
                console.log(thrownError)
                }()

        });

Вот что я получил в терминале колбы:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Dec/2018 12:59:53] "OPTIONS /get_forecast HTTP/1.1" 200 -
in post
{'data': [10.15451836569513, 56.578480707072714, 12.435548873275337]}
127.0.0.1 - - [02/Dec/2018 12:59:53] "POST /get_forecast HTTP/1.1" 200 -

Вот что я получил в хромированной консоли:

demo.html:228 done
demo.html:229 undefined
demo.html:230 undefined
demo.html:231 =====
demo.html:234 fail
demo.html:235 undefined

1 Ответ

0 голосов
/ 02 декабря 2018

Если вы посмотрите на примеры на http://api.jquery.com/jQuery.ajax/, они выглядят немного иначе, чем ваш вызов на $.ajax.Я скорректировал ваш код, чтобы лучше напоминать примеры.Может быть, это поможет?

$.ajax({
    type: "POST", 
    url: "http://localhost:5000/get_forecast",
    data: JSON.stringify(markers),
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json"
    })
    .done(function (data, textStatus, jqXHR) {
        console.log('done');
        console.log(data);
        console.log(textStatus);
        console.log('=====');
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        console.log('fail');
        console.log(textStatus);
    });

Я думаю, вы искали настройки success и error.


Обновление: Да, яЯ уверен, что ваши настройки done и fail неверны.Вы хотите использовать success и error.

Также взгляните на https://stackoverflow.com/a/10931891/1621041

Это означает, что ваш код также может выглядеть так, если вы хотите поместить всев настройки $.ajax звоните:

$.ajax({
    type: "POST", 
    url: "http://localhost:5000/get_forecast",
    data: JSON.stringify(markers),
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json",
    success: function (data, textStatus, jqXHR) {
        console.log('done');
        console.log(data);
        console.log(textStatus);
        console.log('=====');
    },
    error: function (jqXHR, textStatus, errorThrown ) {
        console.log('fail');
        console.log(errorThrown);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...