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

Javascript 从JSON对象检索新数据不起作用?,javascript,jquery,json,Javascript,Jquery,Json,警报(data.name)不会返回数据对象的名称,尽管警报(data.price)返回价格并继续返回价格,无论我传递给alert的参数是什么。我在想原因。如果你有任何想法,请分享。我对这门有趣的语言(即JS/JQ)是完全陌生的,尽管它看起来不透明且难以调试 我在前端运行以下代码以接受用户的股票代码。最初,alert()包含警报(数据.价格),并显示该股票的价格。我把它改为alert(data.name)并且仍然得到了价格。然后我把它改成了alert('hello'),它返回了另一个(正确的)股价

警报(data.name)
不会返回数据对象的名称,尽管
警报(data.price)返回价格并继续返回价格,无论我传递给alert的参数是什么。我在想原因。如果你有任何想法,请分享。我对这门有趣的语言(即JS/JQ)是完全陌生的,尽管它看起来不透明且难以调试

我在前端运行以下代码以接受用户的股票代码。最初,
alert()包含
警报(数据.价格),并显示该股票的价格。我把它改为
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>
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()})

当数据作为JSON从后端传递时,尝试将其转换为Javascript对象,如下所示:

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

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

虽然这个bug的确切性质仍然有些难以捉摸,但WiseGuy(上图)的想法是正确的。在每个页面上(例如,基于web的IDE的代码窗口、HTML表单等),我都确保在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

您是否尝试过清除缓存?当我编写客户端代码时,我喜欢使用Chromes开发工具来禁用缓存。在“网络”选项卡下,选中“禁用缓存”。@WiseGuy-绝对值得一试。非常感谢您的回复。尝试了这个代码,看起来应该可以工作,但它并没有飞起来。要明确的是,你的意思是注释掉console.log(resp)行,如果它不起作用吗?不,如果你打开控制台(在chrome中的F12,然后在选项卡中选择控制台),你会看到“resp”打印在那里。你能把它复制粘贴到下面的评论里吗?这样我就可以帮你弄清楚到底发生了什么。要了解有关调试Javascript的更多信息,请访问此链接,感谢您提供的额外信息和慷慨的帮助。正如上面提到的,我确实设法让一切都正常工作,但是,我肯定会仔细看看您向我提供的资源。干杯