Доступ к списку в AJAX

237
03 марта 2018, 22:12

Используется фреймворк Flask. Есть AJAX запрос. На сервер данные отправляется нормально, и сервер также отправляет данные в ответ, с этим проблем нет, но:

alert(response) возвращает [object Object].

alert(response.data[0]) возвращает undefined.

   function requestFromCalendar() {   
        var first = selected[0];
        var second = selected[1];
        first.month = first.month+1;
        second.month = second.month+1;
        $.ajax({
            data: {
                first: JSON.stringify(first),
                second: JSON.stringify(second)
            },
            type: 'POST',
            dataType: 'json',
            url: '/get_selected_values'
            }).done(function(response) {
                alert(response);
                alert(response.data[0]);
        })
    }
@app.route('/get_selected_values', methods=['POST'])
def get_selected_values():
    values = request.form.get("first")
    first_date = json.loads(values)
    values = request.form.get("second")
    second_date = json.loads(values)
    t = time(0, 0, 0, 0)
    d = date(year=first_date['year'], day=first_date['day'], month=first_date['month'])
    start_date = datetime.combine(d, t)
    start_date = start_date + timedelta(microseconds=123456)
    d = date(year=second_date['year'], day=second_date['day'], month=second_date['month'])
    end_date = datetime.combine(d, t)
    end_date = end_date + timedelta(microseconds=123432)
    data = fetch_selected_date(start_date=start_date, end_date=end_date, login=current_user.get_id())
    if data:
        return jsonify({'data': data})
    return jsonify({'data': []})

Почему не удается увидеть ответные данные от сервера? Как это исправить?

EDIT1

console.log(response) 

выводит

{data: Array(0)}

и

console.log(response.data[0]) 

выводит

undefined

EDIT2

Данные точно есть в data.

Добавлен print data в код Питона. В консоле вывод значений.

EDIT3

Согласно ответу меняю код на pyhton и js. Но данные так и не могу получить.

python:

...
data = fetch_selected_date(start_date=start_date, end_date=end_date, login=current_user.get_id())
    data = json.dumps(data)
    return data

js:

 $.ajax({
        data: {
            first: JSON.stringify(first),
            second: JSON.stringify(second)
        },
        type: 'POST',
        url: '/get_selected_values'
        }).done(function(response) {
        var result = JSON.stringify(response);
        console.log('result:'+result);   // выдает ответ: result:"[]"
        //если console.log('result:'+result[0]);  то ответ будет: result:"
    })

Как исправить такое положение?

Answer 1

что на ноде, что на клиенте

https://github.com/axios/axios

что-то вроде этого

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
let first,second;
first = JSON.stringify(first),
second = JSON.stringify(second)
console.log(first,second)// смотрим что передаём
axios.post('/user', {
    first,second,
})
.then(function (response) {
    // в случае ноды, ставим здесь брейкпоинт(при наличии отладчика)
    // и смотрим переменную response
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});
</script>

а теперь к вопросу, предполагаю, что виной всему строчка

dataType: 'json'

возможно $ ожидает данные в формате json а получает массив, если это так - масcив поместить в переменную объекта, например qwa

resp = {
    qwa:[1,2,3]
}

так же не забыть привести к строке

resp = json.dumps(resp) - питон
resp = JSON.stringify(resp) - js

перед тем как вернуть напечатать

print(type(resp) is str) // проверяем, должна быть строка
print(resp)
return resp // возвращаем

да! есть нюанс, например у fetch response.json это Promise

ещё, как вариант, серверу необходимо передать
content-type: application/json

READ ALSO
Как работает данный код?

Как работает данный код?

Доброго времени суток, пожалуйста, объясните как работает данный код, ответ должен выйти - 2

341
Как работают модули и module.exports в node js

Как работают модули и module.exports в node js

Вопрос по работе модулей и moduleexports в node js

253
Проверка формы в реальном времени

Проверка формы в реальном времени

Есть форма с полем input, и кнопка buttonНужно при вводе к примеру 0 кнопка исчезала, а при вводе 1 кнопка появлялась в режиме реального времени без...

210
Range и Selection не корректное поведение в IE и Firefox - JavaScript

Range и Selection не корректное поведение в IE и Firefox - JavaScript

Всем приветСтолкнулся с задачей ,над которой уже долгое время ломаю голову

199