从JSON对象检索新数据不起作用?

时间:2017-03-28 16:55:42

标签: javascript jquery json

alert(data.name);不会返回数据对象的名称,但alert(data.price);会返回价格并保持返回价格,无论我传递给警报的参数是什么。我试图找出原因。如果您有任何想法,请分享。我对这个有趣的,虽然看似不透明且难以调试的语言(即JS / JQ)感到非常陌生。

我在前端运行以下代码以接受用户的股票代码。最初,alert();包含alert(data.price);,并显示了股票的价格。我将其更改为alert(data.name);并仍然得到了价格。然后我将其更改为alert('hello');,并返回另一个(正确的)股票价格。

前端

<!DOCTYPE html>

<html>
    <head>
        <script src="https://code.jquery.com/jquery-latest.min.js"></script>
        <script>
        /*global $*/

            /**
             * Gets a quote via JSON.
             */
            function quote()
            {
                var url = '/quote?symbol=' + $('#symbol').val();
                $.getJSON(url, function(data) {
                    alert(data.name);
                });
            }

        </script>
        <title>ajax0</title>
    </head>
    <body>
        <form onsubmit="quote(); return false;">
            <input autocomplete="off" autofocus id="symbol" placeholder="Symbol" type="text"/>
            <input type="submit" value="Get Quote"/>
        </form>
    </body>
</html>

在后端,我运行以下代码。它应该为我提供一个JSON对象,通过点表示法可以访问股票的名称,价格等。

后端:

import csv
import os
import urllib.request

from flask import Flask, jsonify, render_template, request
from flask.exthook import ExtDeprecationWarning
from warnings import simplefilter
simplefilter("ignore", ExtDeprecationWarning)
from flask_autoindex import AutoIndex

app = Flask(__name__)
AutoIndex(app, browse_root=os.path.curdir)

@app.route("/quote")
def quote():
    url = "http://download.finance.yahoo.com/d/quotes.csv?f=snl1&s={}".format(request.args.get("symbol"))
    webpage = urllib.request.urlopen(url)
    datareader = csv.reader(webpage.read().decode("utf-8").splitlines())
    row = next(datareader)
    return jsonify({"name": row[1], "price": float(row[2]), "symbol": row[0].upper()})

2 个答案:

答案 0 :(得分:1)

尝试将数据转换为Javascript对象,因为它从后端传递为JSON,如下所示:

$.getJSON(url, function(data) {
   var resp = JSON.parse(data);
   console.log(resp) 
   alert(resp.name);
});

如果这不起作用,则从控制台注释resp。

答案 1 :(得分:0)

虽然虫子的确切性质仍然有点难以捉摸,但WiseGuy(上图)有正确的想法。在每个页面上(例如,基于Web的IDE,HTML表单等的代码窗口),我确保&#34;禁用缓存&#34;已在Chrome开发人员工具的网络标签下选择。另外,我将以下代码从在Flask中完成的先前项目移动到后端,以确保没有缓存响应。我也擦除了我的浏览器历史记录并缓存干净,因为这个bug几天来一直困扰着我,我必须确定我已经覆盖了所有的基础。这些步骤的组合实现了期望的结果。

# ensure responses aren't cached
if app.config["DEBUG"]:
    @app.after_request
    def after_request(response):
        response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
        response.headers["Expires"] = 0
        response.headers["Pragma"] = "no-cache"
        return response