Как сделать эквивалент Flask Safe в вызове ajax - PullRequest
0 голосов
/ 29 ноября 2018

Я не могу воспроизвести эквивалентные функции в моем вызове Ajax, как в обычном Javascript на моей главной странице HTML.Я использую Python / Flask в качестве серверной части.Есть ли аналогичный способ использования {{variable |safe}} синтаксис в AJAX для получения похожих результатов?

Мой класс sample.py

class Sample:
    def __init__(self):
        self.product = 'something'
    def transfer_to_js(self):
        return json.dumps(self.__dict__)

Моя функция фляги

@app.route('/get_data')
def get_data():
    sample = Sample()
    sample_str = sample.transfer_to_js()
    return jsonify(result=sample_str)

HTML / js (где я достигаютребуемые результаты)

<script>
    console.log({{ result|safe }});
    <!-- returns {product:"Something"} -->
</script>

Мой вызов AJAX (где мне не удается достичь желаемых результатов)

$.getJSON('/get_data', {}, 
    function(data) {
        console.log(data.result); // returns {"product":"Something"}

Вызов, который использует этот результат

function printObject(obj){
    console.log(obj['product']); // prints "Something" for regular JS call, prints undefined for AJAX call
}

Таким образомЯ считаю, что разница невелика, то есть кавычки против отсутствия кавычек в ключе словаря, но этого достаточно, чтобы вызвать сбой функции printObject.Есть ли способ справиться с этим вне функции python (поскольку я собираюсь вызывать эту функцию как из обычной функции js, так и из вызова AJAX)?

1 Ответ

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

Оказывается, в вызове AJAX результат передается обратно в виде строки, а не объекта JSON, поэтому, чтобы преобразовать его, я написал это

$.getJSON('/get_data', {}, 
    function(data) {
        console.log(JSON.parse(data.result)); 
    }

, и мои результаты были такими, как ожидалось

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